因此,我有一个自定义的帖子类型“properties”。
我正在使用archive-properties.php
, 需要在$query
.
我不想使用new WP_Query
因为我遇到了一些问题,其中分页插件试图对$query
如果这有任何意义的话,那是我们在存档页面上时就已经存在的。
所以现在我的问题是,如果我posts_per_page
到2
例如,登录到后端,它只显示2个帖子。
所以我需要这个来更改前端的查询,而不是后端的查询。我不知道在if声明中包括什么。
function set_query_parameters($query) {
if( is_main_query() && is_post_type_archive( \'properties\' ) && !$_SESSION ) {
$query->set(\'posts_per_page\', 12);
$query->set(\'orderby\', array(
\'date\' => \'DESC\',
));
}
return $query;
}
add_action( \'pre_get_posts\', \'set_query_parameters\' );
最合适的回答,由SO网友:Tim Malone 整理而成
关于您不使用WP\\U查询的决定,pre_get_posts
实际上是一个很好的选择,而不是创建一个新的WP\\u查询实例。事实上pre_get_posts
正是要更改主查询时应该使用的内容。它不是在每个页面加载上执行单独的查询,而是在执行之前修改主查询的参数。效率更高!
你就快到了。You just need to add !is_admin()
to your if
statement. 您还应特别致电is_main_query()
on the $query
object passed to your function.
通过这两项更改if
声明现在改为:
if( !is_admin() && $query->is_main_query() && is_post_type_archive( \'properties\' ) && !$_SESSION ) {
还值得注意的是,您不需要向Wordpress操作返回值,这与过滤器相反。具有
pre_get_posts
, 论点是
passed by reference 所以您对
$query
变量将自动生效。