为什么‘Pre_Get_Posts’没有效果?

时间:2013-12-13 作者:Nathan

我第一次尝试使用pre\\u get\\u帖子,但没有成功。这是一段非常简单的代码,位于一个空主题的索引页上,纯粹是为了了解动作挂钩的窍门:

function just_one( $query )
{
    $query->set( \'posts_per_page\', 1 );
}
add_action( \'pre_get_posts\', \'just_one\' );
从我读到的内容来看,我看不出这有什么错,但当我在下面运行时:

echo get_query_var( \'posts_per_page\' );
它显示默认的“10”,而不是我所期望的“1”。我做错什么了吗?除上述代码外,索引页完全为空。为任何帮助干杯。

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

。。。这是一段非常简单的代码index 另一个空主题的页面。。。

如果在上运行此代码index page 并期望它影响主查询,那么您添加操作太晚了。主查询在加载主题模板之前运行良好。您需要输入该代码functions.php 在活动主题或插件中使用conditional logic 确保它只在你想要的地方运行。例如

function just_one( $query ) {
  if ( $query->is_main_query() && $query->is_front_page() ) {
    $query->set( \'posts_per_page\', 1 );
  }
}
add_action( \'pre_get_posts\', \'just_one\' );
我真的不知道if 条件应为。有关可用条件,请参阅已链接到的Codex页面。

SO网友:Maruti Mohanty

试试这个。您始终需要检查main_query

function just_one( $query )
{
    if ( $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 1 );
    }
}
add_action( \'pre_get_posts\', \'just_one\' );

结束

相关推荐