我正在使用wordpress。有些产品价格不是数字,它们就像P.O.R. (价格要求)。我有一个过滤器,可以将价格从“低到高”和“从高到高”排序。您可以在下面看到我的排序代码:
从低到高
$args = array(
'post_type' => 'products',
'meta_key' => 'product_price',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'posts_per_page'=> -1
);
$post_list = get_posts($args);
HIGH TO LOW
$args = array(
'post_type' => 'products',
'meta_key' => 'product_price',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'posts_per_page'=> -1
);
$post_list = get_posts($args);
上面的代码是如何工作的。当将字符串与整数进行比较时,将其视为0,这就是为什么在第一种情况下(低到高)产品与P.O.R.在顶部,在第二种情况下(从高到低)它们在底部。但我想要P.O.R.项目总是在底部。研究了很多东西,但没有找到解决方案。有什么想法吗?
答案 0 :(得分:1)
一个简单的解决方案是将POR从低到高查询中排除,并编写一个只查询POR产品的附加查询,然后将其与低合并高查询。要从查询中排除POR,您可以添加meta_compare
$nonpor = array(
'post_type' => 'products',
'meta_key' => 'product_price',
'meta_value_num' => '0',
'meta_compare' => '>'
'orderby' => 'meta_value_num',
'order' => 'ASC',
'posts_per_page'=> -1
);
这将为您提供所有有价格的帖子的列表,没有POR'其次我们查询它们:
$por = array(
'post_type' => 'products',
'meta_key' => 'product_price',
'meta_value_num' => '0',
'meta_compare' => '='
'posts_per_page'=> -1
);
现在我们合并结果:
$regular = new WP_Query( $nonpor );
$pors = new WP_Query( $por );
//create a new, blank query object
$combined = new WP_Query();
// put the combined data into the new query
$combined->posts = array_merge( $regular->posts, $pors->posts );
//set the post count if you need it
$result->post_count = count( $result->posts );
//finally get the post list
$post_list = $combined->posts;
用LOW TO HIGH替换它,你应该很好。