比较/排序价格并将文本价格推到结果的底部 - PHP

时间:2017-02-01 16:48:32

标签: php wordpress sorting

我正在使用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.项目总是在底部。研究了很多东西,但没有找到解决方案。有什么想法吗?

1 个答案:

答案 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替换它,你应该很好。