Match tag names with form titles

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:

  1. 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 );
    
  2. get_the_tags() returns an array of term objects on successful requests, and each object is a WP_Term instance which does not have a tag_name property, only name.

    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

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x