2017-02-12 59 views
0




我对相关的文章shortcode使用了bellow函数,我对此有疑问。它应该显示与相关标签的帖子(我不是为什么它只显示随机帖子),但我想用[rps tag = google]之类的东西,而函数只是返回一个帖子有一个标签为“谷歌”,我的意思是与当前帖子标签无关。我怎样才能做到这一点?

这是代码:
wp中的相关文章的简码

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; 
} 

回答

1

如果你想显示给定的标签后,则没有必要使用wp_get_post_tags(),因为它的收益多标签。试试这个代码,

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'); 
+0

非常好。谢谢。 – ata