0

我有一个 WordPress 主页。它列出了所有类别的所有帖子。这是 WP 默认行为。

我怎么做才能只显示“新闻”类别中显示的那些帖子

下面的代码是网上流传的流行代码。它通过限制类别起作用,但随后它破坏了粘性帖子的行为(它们不会浮动到帖子顺序的顶部)和分页(它在下一页上重复它们)。这也是低效的,因为它必须重新查询主页类别(网站上最受欢迎的页面)。

<?php
if ( is_home() ) {
    query_posts( 'cat=2' ); // This is the category 'News'.
}
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
Post codes....

那么,最好的方法是什么?似乎高级过滤器是执行此操作的正确方法。任何 WordPress 大师都知道这个问题的答案吗?

谢谢!德鲁

4

3 回答 3

2

使用 pre_get_pots 过滤器: http ://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

function my_before_query( $query ) {

   if( !is_admin() && $query->is_main_query() && is_home() ){
       $query->set('cat', 2); 

   }
}
add_action( 'pre_get_posts', 'my_before_query', 1 );
于 2013-08-22T17:18:31.440 回答
0

不确定分页的问题,这也不能解决您的性能问题,但这是我几年前就粘性帖子问题提出的一种解决方法。

您基本上运行两个查询,粘性帖子堆叠在非粘性帖子的顶部。下面是原始代码的简化版本,所以我没有测试过这个确切的代码。然而,一般原则是存在的。如果你愿意,我可以发布原始实现(它是一个主页小部件)。

<ul>
    <?php

    $args_sticky = array(
        'cat' => 2,
        'post__in' => get_option( 'sticky_posts' );
    );

    /*
     *STICKY POSTS
     */
    //Display the sticky posts next

    $the_query = new WP_Query( $args_sticky );

    while ( $the_query->have_posts() ) : $the_query->the_post();
    ?>
        <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    <?php
    endwhile;

    wp_reset_postdata();

    /*
     *NON-STICKY POSTS
     */
    //Display the non-sticky posts next

    $args = array(
       'cat' => 2,
       'post__not_in' => get_option( 'sticky_posts' );
    );

    $the_query = new WP_Query( $args );

    while ( $the_query->have_posts() ) : $the_query->the_post();
    ?>
        <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
    <?php
    endwhile;

    wp_reset_postdata();

?>
</ul>

有关更多信息,请参阅:http ://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

于 2013-08-21T02:20:19.017 回答
0

我认为您的原始代码几乎可以使用它,但我不确定原始 query_string 是否会自动附加:

<?php
    global $query_string;

    if ( is_home() ) {
        query_posts( $query_string . '&cat=2' );
    }
?>

我是@Simalam 提出的解决方案的粉丝。它将导致更清晰的模板代码。

于 2013-08-23T12:47:38.867 回答