在wordpress中的类别模板页面上按标签显示相关帖子

时间:2012-09-06 02:51:38

标签: wordpress nested-loops

我想在类别页面上的帖子旁边按标签显示相关帖子。 我可以找到的所有相关帖子代码都将在single.php的嵌套循环中使用,但我需要它在类别页面的循环中。

所以,当你去类别" Cats"它应该输出以下内容: "发布1个标题",类别" Cats",标记"小猫" "相关帖子1.1标题",标签"小猫" "相关帖子1.2 title",tag" Kittens"


"发布2个标题",类别" Cats",标记" tomcats" "相关文章2.1标题",标记" tomcats" "相关帖子2.2 title",tag" tomcats"


...

这是我提出的代码,但它已经破了。

`//首先查询     $ my_query = new WP_Query(' cat = 6');

// If first query have posts
if( $my_query->have_posts() ) :

    // While first query have posts
    while ($my_query->have_posts()) : $my_query->the_post(); 
    ?>

    <!-- start post -->


     <!-- End post div -->

        <?php
        // tags

            $tag_ids = array();
                            foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
                            $args=array(
                            'tag__in' => $tag_ids,
                            'post__not_in' => array($post->ID),
                            'posts_per_page'=>99,
                            'caller_get_posts'=>1
                            );
            // Second query
            $my_second_query = new WP_Query('$args');

            // If second query have posts
            if( $my_second_query->have_posts() ) :
            ?>

                <?php
                // While second query have posts
                while( $my_second_query->have_posts() ) : $my_second_query->the_post();


                    ?>
                    <!-- start post -->


     <!-- End post div -->


                    <?php
                // End second while have posts
                endwhile;
                ?>
    <?php
    // End first while have posts
    endwhile; 

// End if first query have posts
endif;
?>`

这甚至可能吗?我无法为我的生活找到榜样。 非常感谢提前

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。看起来你的代码方向正确。您需要做的就是创建一个自定义查询,查看当前帖子的标签,然后使用这些标签查找其他帖子。只要你在循环中,它是否在single.php或其他任何地方使用都无关紧要。将其添加到您的functions.php文件中:

function echo_related_posts() {
    global $post;
    // Get the current post's tags
    $tags = wp_get_post_tags( $post->ID );
    $tagIDs = array();
    if ( $tags ) {
        // Fill an array with the current post's tag ids
        $tagcount = count( $tags );
        for ( $i = 0; $i < $tagcount; $i++ ) {
            $tagIDs[$i] = $tags[$i]->term_id;
        }
        // Query options, the magic is with 'tag__in'
        $args = array(
            'tag__in' => $tagIDs,
            'post__not_in' => array( $post->ID ),
            'showposts'=> 5
        );
        $my_query = new WP_Query( $args );
        // If we have related posts, show them
        if ( $my_query->have_posts() ) {
            $related = '';
            while ( $my_query->have_posts() ) {
                $my_query->the_post();
                $current = $my_query->current_post + 1;
                $related .= "Related post " . $current . ": ";
                $related .= "<a href='" . get_permalink() . "' >";
                $related .= get_the_title();
                $related .= "</a>";
                if ( ( $my_query->current_post + 1 ) != ( $my_query->post_count ) ) $related .= ", ";
            }
            echo $related;
        }
        else echo "No related posts";
    }
    else echo "No related posts";
    wp_reset_query();
}

显然,您可以更改此功能中的任何内容以获得您正在寻找的确切结果,这只是一个示例,最多可回复五个相关帖子。请查看http://codex.wordpress.org/Class_Reference/WP_Query以获取有关自定义查询的进一步参考。

使用该功能,您现在可以访问echo_related_posts()功能,该功能将通过常用标签输出任何相关帖子。因此,在您的category.php或您的类别页面中使用的模板中,您可以执行以下操作(为简洁起见,这是一个过于简化的循环,请注意echo_related_posts()函数):

// Inside your existing loop
<?php while ( have_posts() ) : the_post(); ?>

    // Output the current post info here

    // Output the related posts
    <?php echo_related_posts(); ?>

<?php endwhile; ?>

假设找到相关帖子,它将输出如下内容:

“相关文章1:标题一,相关文章2:标题二,相关文章3:标题三”

希望你能从那里拿走它!