I’m using this plugin to add tags for a page:
http://wordpress.org/extend/plugins/post-tags-and-categories-for-pages/

And I’ve added tags support for the custom post:

function codex_custom_init() {
    $args = array(
      'public' => true,
      'has_archive' => true,
      'label'  => 'Doing',
      'taxonomies' => array('post_tag'),
      'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt')
    );
    register_post_type( 'doing', $args );
}
add_action( 'init', 'codex_custom_init' );

In every page with an specific tag I want to display related custom posts that have the same tag as the page, is this possible to do? How can I get to load on the page the tag related custom posts?

I’ve tried with this code but is not showing any related post:

  <?php
      $tags = wp_get_post_tags($post->ID);
      if ($tags) {
          echo 'Related Posts';
          $first_tag = $tags[0]->term_id;
          $args=array(
              'tag__in' => array($first_tag),
              'post__not_in' => array($post->ID),
              'posts_per_page'=>5,
              'caller_get_posts'=>1
          );
          $my_query = new WP_Query($args);
          if( $my_query->have_posts() ) {
              while ($my_query->have_posts()) : $my_query->the_post(); ?>
              <a href="https://wordpress.stackexchange.com/questions/227946/<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>

               <?php
               endwhile;
          }
          wp_reset_query();
      }
  ?>

2 Answers
2

You need to specify a post type in your WP_Query arguments when you need to query any other post type accept the build in post type post.

By default, post_type is set to post, so when no specific post type is set manually by the user, WP_Query will query posts from the post type post

Additionally, caller_get_posts have been deprecated for a very very long time now. If you had debug turned on, you would have recieved a deprecation notice about this. The correct arguments to use is ignore_sticky_posts.

I would also not use the $post global as it is unreliable, for reliability, rather use $GLOBALS['wp_the_query']->get_queried_object(). You can read up on this subject in my answer here

get_the_tags() is also faster than wp_get_post_tags() as the latter requires an extra db call.

One last note, wp_reset_query() is used with query_posts, the correct function to use with WP_Query is wp_reset_postdata()

In essence, you can try the following

$post_id = $GLOBALS['wp_the_query']->get_queried_object_id();
$tags = get_the_tags( $post_id );
if (    $tags
     && !is_wp_error( $tags ) 
) {
    $args = [
        'post__not_in' => [$post_id],
        'post_type'    => 'doing',
        'tag__in'      => [$tags[0]->term_id],
        // Rest of your args
    ];
    $my_query = new WP_Query( $args );

    // Your loop

    wp_reset_postdata();
}

Leave a Reply

Your email address will not be published. Required fields are marked *