加载带有与页面相同标签的自定义帖子

时间:2016-05-26 作者:wpuser

我正在使用此插件为页面添加标记:http://wordpress.org/extend/plugins/post-tags-and-categories-for-pages/

我还为自定义帖子添加了标签支持:

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\' );
在每个带有特定标记的页面中,我想显示与页面具有相同标记的相关自定义帖子,这可以做到吗?如何在页面上加载与标签相关的自定义帖子?

我已尝试使用此代码,但未显示任何相关帖子:

  <?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="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>

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

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

您需要在WP_Query 需要查询任何其他post类型时的参数接受内置post类型post.

默认情况下,post_type 设置为post, 因此,当用户没有手动设置特定的职位类型时,WP_Query 将从职位类型查询职位post

此外,caller_get_posts 已经被弃用了很长一段时间了。如果您打开了debug,您会收到关于此的弃用通知。要使用的正确参数是ignore_sticky_posts.

我也不会使用$post 全球,因为它是不可靠的,为了可靠性,而不是使用$GLOBALS[\'wp_the_query\']->get_queried_object(). 你可以在my answer here

get_the_tags() 也比wp_get_post_tags() 因为后者需要额外的db调用。

最后一个音符,wp_reset_query() 与一起使用query_posts, 要与一起使用的正确功能WP_Querywp_reset_postdata()

本质上,您可以尝试以下方法

$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();
}

SO网友:Gareth Gillman

我的第一个呼叫端口是呼叫global $post; - 这样你就可以使用$post->ID ... 如果您正在使用它,则下一步是分别显示每个零件,例如。

print_r($tags);

echo $first_tag;
查看每个部分中显示的内容,这将有助于诊断问题所在,因为在没有看到代码工作的情况下,我们无法说出它为什么不工作。