如果存在META_KEY,则使用PRE_GET_POSTS()更改查询

时间:2016-10-18 作者:mantis

我正在尝试修改包含类别粘性帖子(由Category Sticky post plugin)

为此,我使用pre_get_posts钩住并尝试了以下操作:

add_action( \'pre_get_posts\', \'my_set_category_posts_per_page\' );

function my_set_category_posts_per_page( $query ) {

  global $wp_the_query;

  if ( \'category_sticky_post\' === $query->get( \'meta_key\' ) && ! is_paged ) {

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

  }

  return $query;
}
var_dump($query) 我确实得到了[meta_key] => category_sticky_postquery_vars 但我不知道如何使用它。

另一个想法是使用如下内容:

function my_set_category_posts_per_page( $query ) {

  $args = array(
        array(
            \'key\'     => \'category_sticky_post\',
            \'compare\' => \'EXISTS\'
        )
    );
    $meta_query = new WP_Meta_Query($args);

    if ( \'category_sticky_post\' === $query->get(\'meta_query\', $meta_query) && ! is_paged() ) {

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

    }
}
仅当当前查询中的帖子存在元键时,我如何更改查询?

1 个回复
SO网友:jdm2112

根据Gist中的数据,以下是pre_get_posts 条件应该可以限制你每页的帖子。

add_action( \'pre_get_posts\', \'my_set_category_posts_per_page\' );

function my_set_category_posts_per_page() {
    global $wp_query;

    if ( \'category_sticky_post\' === $wp_query->query_vars[\'meta_key\'] ) {
      $wp_query->set( \'posts_per_page\', 8 );
    }
}

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>