根据类别有选择地显示wordpress帖子

时间:2010-05-03 13:39:01

标签: php html wordpress

目前我正在使用以下代码作为Wordpress侧边栏代码的一部分(代码工作正常):

<ul class="linklist">
<?php $recentPosts = new WP_Query(); 
$recentPosts->query('showposts=12'); 
while ($recentPosts->have_posts()) : $recentPosts->the_post(); 
?> 
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Link to <?php the_title();
 ?>"> 
 <?php the_title(); 
?></a> </li> 
<?php endwhile;?> </ul> 

显示最近12篇帖子。但我正在寻找的是以下内容; 首先检查当前帖子(基于永久链接显示的帖子)所属的类别,然后仅列出属于同一类别的最新帖子。 应该编辑什么?谢谢!

3 个答案:

答案 0 :(得分:0)

查看http://codex.wordpress.org/Function_Reference

听起来你想要get_the_category()。 (帖子可以属于多个类别)。然后你想要调用get_posts()传递类别标志和你想要的任何其他东西。

答案 1 :(得分:0)

这可能不是最短且最智能的解决方案,但如果我没有包含任何拼写错误,它应该以这种方式工作。

请注意,帖子可以有多个类别,下面的脚本只对第一个类别感兴趣。但您也可以修改脚本并为多个类别选择最近的帖子。

<?php
if (is_single()) :
    $post_id = $wp_query->posts[0]->ID; // get id of post
    $cats_of_post = get_the_category($post_id); // get categories by post id
    $first_cat_id = $cats_of_post[0]->cat_id; // get first category id
    $first_cat_name = $cats_of_post[0]->cat_name; // get category name
?>
<div id="widget-container-recent-in-category">
    <div class="widget-title">
        <h3>Latest posts in <?php echo $first_cat_name; ?>:</h3>
    </div>
    <div class="widget-content">
        <ul>
        <?php
            global $post;
            $posts_in_cat = get_posts('numberposts=5&category='.$first_cat_id);
            // iterate over posts in category and output as listitem
            foreach($posts_in_cat as $post) :
        ?>
           <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php
            endforeach;
        ?>
        </ul>
    </div>
</div>
<?php 
    endif;
?> 

答案 2 :(得分:0)

这是一个新的查询,可以在帖子或页面(启用php exec)或侧边栏中多次使用,并且不会相互冲突或主WP循环。将mycategory更改为您自己的类别名称:

<?php $my_query = new WP_Query('category_name=mycategory&showposts=12'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
<?php the_title(); ?></a>
<?php endwhile; ?>