如何通过自定义帖子类型按两个自定义字段排序
这里是我的元查询,以按照DESC顺序按价格排列的property_type和卧室过滤属性。如何通过自定义帖子类型按两个自定义字段排序
$properties = array(
'post_type' => 'soto_property',
'paged'=>$paged,
'posts_per_page' => 6,
'orderby' => 'meta_value_num',
'meta_key' => 'price',
);
/*check Price range */
if (!empty($_GET['price_range'])) {
$lowestPrice=get_post_meta($_GET['price_range'],"lowest_price",true);
$maximumPrice=get_post_meta($_GET['price_range'],"maximum_price",true);
$properties['meta_query'][] = array(
'key' => 'price',
'value' => array($lowestPrice, $maximumPrice),
'type' => 'numeric',
'compare' => 'BETWEEN',
);
}
else
{
$properties['meta_query'][] = array(
'key' => 'price',
'compare' => 'EXISTS'
);
}
/*check bedrooms range */
if (!empty($_GET['bedrooms'])) {
$beds_value=get_post_meta($_GET['bedrooms'],"beds_value",true);
if($beds_value)
{
$properties['meta_query'][] = array(
'key' => 'dorm_room',
'value' => $beds_value,
'type' => 'numeric',
'compare' => '>='
);
}
}
function orderbyreplace($orderby) {
global $wpdb;
return ('mt1.meta_value DESC, mt2.meta_value ASC');
}
add_filter('posts_orderby','orderbyreplace');
query_posts($properties);
remove_filter('posts_orderby','orderbyreplace');
它工作正常,但现在我想订房子也卧室。
例如,如果卧室值被选择为“2”,则其具有卧室过滤所有属性值大于2。
我想订购像卧室第一所有属性的属性值2在价格顺序过滤(DESC )然后所有属性 卧室值3按价格顺序过滤(DESC),然后类似卧室值为4,5和6.
如何做到这一点?
function my_pre_get_posts($query) {
// do not modify queries in the admin
if(is_admin()) {
return $query;
}
// only modify queries for 'price' post type
if(isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'property') {
$price =get_post_meta($post_id, 'price', true);
if($price){
$query->set('orderby', 'meta_value_num');
$query->set('meta_key', 'price');
$query->set('order', 'DESC');
}
else
{
$query->set('orderby', 'meta_value_num');
$query->set('meta_key', 'bed');
$query->set('order', 'DESC');
}
}
// return
return $query;
}
add_action('pre_get_posts', 'my_pre_get_posts');
你可以在你的functions.php使用它会自定义字段“价格”
我的自定义帖子类型是“财产”而不是“价格”。价格和床是“财产”自定义帖子类型中的两个自定义字段,我想订购由两个自定义字段说价格和床位的自定义帖子。 –
从自定义字段使用获取帖子元,然后比较,并根据此设置元键价格或床 –
类似,你可以做到这一点卧室get_post_meta(post_id,'卧室',真)然后使用它,如果磨碎,然后2然后使用这是为了订购记录 –
您可以使用“pre_get_posts”过滤器中的functions.php –
请你能告诉我如何在functions.php中使用'pre_get_posts'滤波器的阶数呢? –