我正在创建一个插件,添加一个自定义提要。我正在使用pre_get_posts
过滤器以更改posts_per_page
将var查询到-1(以获取自定义帖子类型的所有项目)。但是,如果我将$wp_query
在渲染函数中,posts_per_page
保持默认值。我也测试了改变posts_per_rss
到-1,我确实看到了在查询中所做的更改(当然,它对生成的帖子没有任何影响)。我还尝试将主题更改为默认主题并进行测试,但结果相同。谁能解释一下为什么我不能改变posts_per_page
查询变量?
defined( \'ABSPATH\' ) OR exit;
if(!class_exists(\'My_Custom_Feeds\'))
{
class My_Custom_Feeds {
protected $feed_slug = \'theslug\';
function __construct() {
add_action( \'init\', array($this, \'mcf_add_feed\'));
add_filter( \'pre_get_posts\', array($this, \'mcf_pre_get_posts\'));
}
function mcf_add_feed() {
add_feed($this->feed_slug, array($this, \'mcf_render\'));
}
function mcf_render(){
//just output query to ensure it is as expected - but it\'s not
global $wp_query;
var_dump($wp_query);
exit();
}
function mcf_pre_get_posts( $query ) {
if ( $query->is_main_query() && $query->is_feed( $this->feed_slug ) ) {
// modify query here to show all posts
$query->set( \'posts_per_page\', -1);
$query->set( \'posts_per_rss\', -1);
}
}
}
}
if ( class_exists(\'My_Custom_Feeds\') ){
$my_custom_feeds = new My_Custom_Feeds();
}
<小时>
Update one:意识到我在使用
add_filter
而不是
add_action
对于
pre_get_posts
. 我已经更新了,尽管我仍然看到同样的问题。
add_action( \'pre_get_posts\', array($this, \'mcf_pre_get_posts\'));
<小时>
Update two (and final):根据@ialocin的回答,我意识到
posts_per_page
查询变量无效,因为它被
posts_per_rss
feed查询中的选项(我的场景)。因此,答案是使用过滤器来更改该选项。-1不是有效的
posts_per_rss
值,因此下面使用任意值。)
function mcf_posts_per_rss( $option_name ) {
global $wp_query;
if ( $wp_query->is_main_query() && $wp_query->is_feed( $this->feed_slug ) ) {
return 100; //arbitrarily large value that, while not ideal, works for me
}
return $option_name;
}
然后在我的插件类构造函数中添加了以下内容(并删除了
pre_get_posts
操作):
add_filter( \'pre_option_posts_per_rss\', array( $this, \'mcf_posts_per_rss\') );