The question:
I am trying to match tag names with form titles to fetch the correct form into the current post, to subscribe to new posts tagged with the current posts tag.
I only have 1 tag assigned per post.
The code for categories works well, and I tried to transcribe it for tags, but I am afraid there are syntax errors in the code, because it does not work.
How do I write the correct code?
add_shortcode( 'subscribe-to-tag', function() {
global $wpdb, $post;
$the_tag = get_the_tags( $post->ID );
$tag_name = $the_tag[0]->tag_name;
$id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM wptq_forms WHERE name = '{$tag_name}';"));
if (is_null($id)) { return ''; }
return do_shortcode( '[newsletter_form id="' . intval( $id ) . '"]' );
} );
The Solutions:
Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.
Method 1
I don’t see PHP syntax errors (like unwanted brackets) in your code, but there are two WordPress-specific issues that need to be fixed:
-
Note that
wpdb::prepare()
needs one or more placeholders (e.g.%s
for strings and%d
for numbers) and the replacement value for each placeholder.So in your case, the correct
$wpdb->prepare()
would be:$wpdb->prepare( "SELECT ID FROM wptq_forms WHERE name = %s", $tag_name );
-
get_the_tags()
returns an array of term objects on successful requests, and each object is aWP_Term
instance which does not have atag_name
property, onlyname
.Therefore
$the_tag[0]->tag_name
should instead be$the_tag[0]->name
.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0