在WordPress中我有一个带有一些$ args数组的循环,我希望能够根据$ _GET值有条件地进行编辑。
$args = array(
'post_type' => 'property',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => $meta_query,
'tax_query' => $tax_query,
'fields' => 'ids',
'no_found_rows' => true,
'post__in' => $post__in,
'nopaging' => true
);
当像这样添加到$ args数组时:
if ( $_GET['prop_sort'] == 'price' ) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'ASC';
$args['meta_key'] = $prefix . 'price';
}
没有任何变化,并且添加到$ args的内容会被忽略。但是,当我把这样的代码放在:
args = array(
'post_type' => 'property',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => $meta_query,
'tax_query' => $tax_query,
'fields' => 'ids',
'no_found_rows' => true,
'post__in' => $post__in,
'nopaging' => true
);
$args['orderby'] = 'meta_value_num';
$args['order'] = 'ASC';
$args['meta_key'] = $prefix . 'price';
一切按预期工作,帖子按价格从小到大排序。 可能是什么问题?
编辑:
尝试影响这样的查询:
function myplugin_pre_get_posts( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->query_vars['post_type'] == 'property' ) {
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'ASC' );
$query->set( 'meta_key', 'sb_price' );
}
return $query;
}
add_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );
Dones也不起作用(第65行的.. \ functions.php中的未定义索引:post_type)。