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 ) . '"]' );
} );
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
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.%sfor strings and%dfor 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_Terminstance which does not have atag_nameproperty, onlyname.Therefore
$the_tag[0]->tag_nameshould 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