如果要更改现有查询的顺序,则不应创建新的WP_Query
对象,但使用pre_get_posts
更改现有查询,以防止不必要地运行多个查询。
从pre_get_posts
docs:
此挂钩在创建查询变量对象之后,但在实际查询运行之前调用。
这是一个如何将自定义帖子类型的所有查询更改为按自定义字段排序的示例。显然,它需要改变以适应您的情况,但应该让您知道该怎么做:
/**
* Alters queries
*/
add_action( \'pre_get_posts\', \'wpse_217090_pre_get_posts\' );
function wpse_217090_pre_get_posts( $query ) {
// don\'t run on the backend
if ( is_admin() )
return;
// Only run on post types \'your_custom_post_type\'
if ( is_post_type_archive(\'your_custom_post_type\') && $query->is_main_query() || $post_type == \'your_custom_post_type\' ) {
$query->set( \'orderby\', \'meta_value\' );
$query->set( \'meta_key\', \'_your_custom_field\' );
$query->set( \'order\', \'ASC\' );
}
return;
}
作为参考,你应该仔细阅读;