wp 中相关 post 的简码

shortcode for related post in wp



我正在为相关的 post 简码使用波纹管函数,我对此有疑问。它应该显示带有相关标签的 posts(我不明白为什么它只显示随机的 posts)但我想使用类似 [rps tag=google] 和函数只是 return 一个 post 有一个标签为“google”,我的意思是与当前的 post 标签无关。我该怎么做?

这是代码:

add_shortcode('rps', 'fphp_get_related_posts');
function fphp_get_related_posts() {
    $reset_post = $post;
    global $post;
    $post_tags = wp_get_post_tags($post->ID);

    if ($post_tags) {
        $post_tag_ids = array();
    foreach($post_tags as $post_tag) $post_tag_ids[] = $post_tag->term_id;
        $args=array(
            'tag__in' => $post_tag_ids,
            'post__not_in' => array($post->ID),
            'posts_per_page' => 1,
            'orderby' => 'rand',
        );

    $related_query = new wp_query( $args );
    if (intval($related_query->post_count) === 0) return '';

    $html = '<div class="rps"><ul><h3>Also read:</h3>';
      $related_query->the_post();
      $html .= '<li style="width:250px">';
      $html .= '<div class="relatedthumb"><a rel="external" href="'. get_the_permalink(). '">';
      $html .= get_the_title() . '</a>';
      $html .= '</div></li>';
  }
  $post = $reset_post;
  wp_reset_query();

  $html .= '</ul></div>';
  return $html;
}

如果你想显示给定的标签post,那么不需要使用wp_get_post_tags(),因为它有return多个标签。试试这个代码,

function fphp_get_related_posts( $atts ) {
  $atts = shortcode_atts( [
    'tag'      => '',
  ], $atts );

  $args = [ 'posts_per_page' => 1, 'tag' => $atts['tag'], 'orderby' => 'rand' ];
  $query = new WP_Query( $args );

  if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
  ob_start();  ?>

  <!-- your html here -->

  <?php endwhile; endif; wp_reset_postdata();
  return ob_get_clean();
}
add_shortcode( 'rps','fphp_get_related_posts' );