如何通过填充货币符号和数字的meta_key acf字段进行排序?

时间:2019-03-29 19:41:30

标签: wordpress sorting advanced-custom-fields meta-query

我正在使用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.

1 个答案:

答案 0 :(得分:0)

理想情况下,您将只存储整数(或浮点)值,例如:0022000323000等。这将允许您可以在以后添加所需的任何货币符号和格式,从而简化排序和操作。

因此,首先,您应该评估您是否可以通过并执行该操作(这可能值得您花费一段时间)。

除非如此,否则您可以尝试使用meta_value_num Orderby Parameter

$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,但没有进行其他转换-因此我不确定它如何处理美元符号,逗号和其他字符。

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