Related Post by Tags Code

时间:2017-06-07 作者:user121289

我试图实现的基本功能是获取当前帖子的标签,查找附加到这些标签的所有帖子,然后只返回至少有3个共同标签的帖子

我已经玩了一个星期左右了。

在这里找到了一个几乎完美完成工作的片段。

$tags = array( \'bread\', \'cheese\', \'milk\', \'butter\');

$args = array(
    \'tag_slug__in\' => $tags
    // Add other arguments here
);

// This query contains posts with at least one matching tag
$tagged_posts = new WP_Query( $args );

echo \'<ul>\';
  while ( $tagged_posts->have_posts() ) : $tagged_posts->the_post();

   // Check each single post for up to 3 matching tags and output <li>
   $tag_count       = 0;
   $tag_min_match   = 3;

   foreach ( $tags as $tag ) {
      if ( has_tag( $tag ) && $tag_count < $tag_min_match ) {
         $tag_count ++;
      }
   }

   if ( $tag_count == $tag_min_match ) {
      //Echo list style here
      echo \'<li><a href="\' . get_permalink() . \'" title="\' . get_the_title() . \'">\' . get_the_title() . \'</a></li>\';
   }

  endwhile;

wp_reset_query();
echo \'</ul>\';
但正如您所看到的,您必须手动将标记名输入到数组中。。。所以它不会自动工作。

我尝试了几种不同的方法尝试自动从帖子中提取标签,但无法使其正常工作。。。

我的技能相当有限,只是在将标记id放入数组时,向错误的方向迈出了一些笨拙的步骤。

有人知道我如何才能做到这一点吗?

非常难堪。

1 个回复
SO网友:socki03

因此,如果我正确读取了您的代码,那么您正试图将当前帖子的所有标记ID转储到您的tag\\uu in数组中。

我唯一犹豫不决的是,如果查询只是按发布日期或实际标记相关性进行的,我不确定该查询是如何返回订单的。

应该是这样的:

if ( $tags ) {

    $tag__in_array = wp_list_pluck( $tags, \'ID\' );

    $args = array(
        \'tag__in\'             => $tag__in_array,
        \'post__not_in\'        => array( $post->ID ),
        \'posts_per_page\'      => 30,
        \'ignore_sticky_posts\' => true
    );
    $tags_query = new WP_Query( $args );
    if( $tags_query->have_posts() ) {

        // Rest is the same
此外,您还需要使用ignore_sticky_posts 而不是caller_get_posts

自3.1版以来,caller\\u get\\u帖子已被弃用!

让我知道这是否有效。祝你好运

结束