1

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

因此,当您转到“猫”类别时,它应该输出以下内容:“帖子 1 标题”,“猫”类别,标签“小猫”“相关帖子 1.1 标题”,标签“小猫”“相关帖子 1.2 标题”,标签“小猫”


“帖子 2 标题”,类别“猫”,标签“tomcats” “相关帖子 2.1 标题”,标签“tomcats” “相关帖子 2.2 标题”,标签“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;
?>`

这甚至可能吗?我一辈子都找不到例子。提前谢谢了

4

1 回答 1

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:标题三”

希望你能从那里拿走它!

于 2012-09-06T05:11:08.437 回答