指定子类别页面的帖子数

时间:2017-01-18 作者:BethA

我已经使用此功能更改了类别页面上每页的帖子数量,但我无法让它在sub-类别页面。

我试图在子类别页面上显示6篇文章,在父类别页面上显示12篇文章。

function my_post_queries( $query ) {
  if (!is_admin() && $query->is_main_query()){

    if(cat_is_ancestor_of( 7, get_query_var( \'cat\' ) )  ){
      $query->set(\'posts_per_page\', 6);
    }
      if(is_category( \'7\' )){
      $query->set(\'posts_per_page\', 12);
    }
  }
}
add_action( \'pre_get_posts\', \'my_post_queries\' );
当我在存档页面上使用cat\\u is\\u祖先\\u来更改子类别页面的布局时,它可以工作,但当我在该功能中使用它时,它就不能工作了。

2 个回复
最合适的回答,由SO网友:CK MacLeod 整理而成

好吧,那么这个怎么样?(Changed from first try - now tested.)

function my_post_queries( $query ) {

    if ( ! is_admin() && $query->is_main_query() ) {

        if ( is_category( 7 ) ) {

            $query->set( \'posts_per_page\', 6 );

        }

        //works with pretty permalinks
        $cat_id = get_queried_object()->term_id;

        if ( cat_is_ancestor_of( 7, $cat_id ) ) {

            $query->set( \'posts_per_page\', 12 );

        }

    }

}
注:仍不确定包含的目的或效果return ;\'s、 对功能没有明显的影响,所以将其排除在外。

SO网友:CK MacLeod

您的代码和the similar code in the Codex - 使用“返回”在每个“集合”之后因此,使您的代码符合示例如下所示:

function my_post_queries( $query ) {

   if ( ! is_admin() && $query->is_main_query() ) {
       if( cat_is_ancestor_of( 7, get_query_var( \'cat\' ) ) ) {
          //drumroll
          $query->set(\'posts_per_page\', 6);
          //ta-da!
          return;
       }

       if( is_category( 7 ) ) {
          $query->set(\'posts_per_page\', 12);
          //encore!
          return;
       }
    }
}

add_action( \'pre_get_posts\', \'my_post_queries\' );
未测试。我希望我能权威地向你解释什么是“回报”在这里。在进行研究冒险之前,我想知道它是否能为你解决问题。