1

我正在使用 WP_Query 查询列表(自定义帖子类型)并按 ACF 元字段排序结果。该字段包含带有货币符号和逗号分隔的价格值,例如 $100,000。

这是我传递给WP_Query的$args

$args = array(
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_key' => '_listing_price',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$listing_query = new WP_Query($args);

结果:

$0 $0 $100,000 $150,000 $22,000 $320,300 $33,000 $359,000.

但我需要这样的结果:

$0 $0 $22,000 $33,000 $100,000 $150,000 $320,300 $359,000.
4

1 回答 1

0

理想情况下,您只需要存储整数(或浮点数)值,例如:0022000323000等。这将允许您稍后添加任何货币符号和格式,并且便于排序和操作。

所以首先,你应该评估你是否可以通过并做到这一点(这可能值得你花时间)。

除此之外,您可以尝试使用meta_value_num Orderby 参数

$args = array(
    'post_type'      => 'listing',
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'meta_key'       => '_listing_price',
    'orderby'        => 'meta_value_num',
    'order'          => 'ASC'
);

$listing_query = new WP_Query($args);

但是,我不确定它是否会起作用。源显示它添加+0到元查询别名,但没有以其他方式转换它 - 所以我不确定它如何处理美元符号、逗号和其他字符。

第三种选择是像现在一样得到你的结果,然后遍历它们并根据元值手动重新排序它们。对于少数列表,它不会增加大量开销,但我会在任何规模上避免这种方法。

于 2019-03-29T20:23:56.327 回答