每次查询时都会触发“PRE_GET_POST”

时间:2011-09-16 作者:onetrickpony

如何仅更改主查询的参数,而不影响其他查询?

add_filter(\'pre_get_posts\', \'custom_post_count\');
function custom_post_count($query){
  $query->set(\'posts_per_page\', 5);
  return $query;
};
由于此操作是在WP\\u Query的get\\u posts方法中调用的,因此此代码将更改所有循环(而不仅仅是main)的posts\\u per\\u page参数,因此将此参数传递给WP\\u Query是无用的。。。

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

基本上你要找的是global $wp_the_query 设置为主查询值的变量。它可能不完全适合100%的情况,但可能在99%的情况下都能正常工作:

add_action( \'pre_get_posts\', \'custom_post_count\' );
function custom_post_count( $query ){
  global $wp_the_query;
  if ( $wp_the_query === $query ) {
    $query->set( \'posts_per_page\', 5 );
  }
  return $query;
};

SO网友:Brian Fegter

首先,“pre\\u get\\u posts”是一个操作,而不是过滤器。这是开始时的主要问题。其次,需要为上下文设置条件。

add_action(\'wp\', \'custom_post_count\');
function custom_post_count($query){
    if($query->is_home || $query->is_front_page){
        $query->set(\'posts_per_page\', 5);
    }
    return $query;
};
上一个示例是,如果要在函数中使用此选项一次。php而不接触模板文件。就影响每个查询而言,如果不创建新查询,则每个循环都会继承pre\\u get\\u posts$查询。这就是我在下面的示例中使用query\\u posts()创建新查询的原因。

Custom Loops

这是我如何进行自定义循环的:

$args = array(
    \'posts_per_page\' => 5
);
query_posts($args);

if(have_posts()): while(have_posts()): the_post();


endwhile; else:

endif;

wp_reset_query();
只需将query\\u posts()放在循环上方,将wp\\u reset\\u query()放在循环末尾。

希望这对您有所帮助。:)

结束

相关推荐

Loop inside the loop

我正在做一个项目,我需要显示一个类别中的2篇文章,还需要在这篇文章之间设置另一个循环,以显示其他类别中的随机文章列表。最简单的方法是创建3个查询,但当我为一个类别创建2个查询时,出现了一个问题,一个循环中断并显示两个帖子,第二个很好。我在第二次查询中使用了offset参数,但它不起作用。<?php $first_query_args = array( \'category_name\' => \'first-category\',&