Single.php中按标签显示的WordPress相关帖子

时间:2020-01-16 作者:Teejah James

我想创建一个相关的帖子,但我尝试的代码只显示使用第一个标记的相关帖子。我想要使用所有标签的相关帖子(因为我的网站是一个博客,每篇文章最多可以有(最多)5个标签)

我想根据第一个标签显示相关帖子,然后使用其他(最多5个)标签

显示的代码没有按预期工作,怎么了?

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

1 个回复
最合适的回答,由SO网友:Andrea Somovigo 整理而成

显示的代码没有按预期工作,怎么了?

您只使用了第一个标记:$first_tag = $tags[0]->term_id;要从所有标签中获取帖子,您必须迭代整个数组,直到最大值为5。下面的代码(未测试)理论上最多可以使用5个标签获取25篇文章。。但是,如果您有25篇属于第一个标记的帖子,那么无论如何,您只会有与第一个标记相关的帖子:

$tags = wp_get_post_tags($post->ID);
if ($tags) {
  echo \'Related Posts\';
  $max=5;
  $arrayTags=[];
  for($k=0;$k<$max;$k++){
    $arrayTags[]=$tags[0]->term_id;
  }

  $args=array(
    \'tag__in\' => $arrayTags,
    \'post__not_in\' => array($post->ID),
    \'posts_per_page\'=>25,
    \'ignore_sticky_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();
}
为了确保从5个标签中抓取5篇文章,您应该运行5个查询(除非有更有效的方法,我不知道)

$tags = wp_get_post_tags($post->ID);
if ($tags) {
    echo \'Related Posts\';
    $max=count($tags) >5 ? 5 : count($tags) ;
    $idsToExclude=[$post->ID];
    //ob_start();
    for($k=0;$k< $max ;$k++){
        $args=array(
        \'tag__in\' => $tags[$k]->term_id,
        \'post__not_in\' => $idsToExclude,
        \'posts_per_page\'=>5,
        \'ignore_sticky_posts\'=>1 // caller_get_posts is deprecated
        );
        $my_query = new WP_Query($args);
        if( $my_query->have_posts() ) {
            while ($my_query->have_posts()) : $my_query->the_post(); 
            if(!in_array(get_the_id(),$idsToExclude)){
                $idsToExclude[]=get_the_id();   // add this id to the exclusion for the next query
            }           
            ?>
            <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a><br>
            <?php
            endwhile;
        }

    }
    //echo ob_get_clean();
    wp_reset_query();
}

相关推荐

如何对ACF分类字段使用GERM_TERMS()和META_QUERY?

我有一个自定义的分类法,事件(“event”)。通过ACF,它还有一个分类字段“Topic”,将其链接到一个二级分类Topic(“Topic”)。我想get_terms() 对于所有带有特定“主题”术语“媒体”的活动术语,其恰好具有术语ID 422。我知道get_terms() 可以接受meta\\u查询,但我不知道如何正确获取所需内容。这两个都没有返回结果…\'meta_query\' => array( array( \'key\' =