【问题标题】:How to orderby meta_key acf field populated with currency symbol and digits?如何通过填充货币符号和数字的 meta_key acf 字段排序?
【发布时间】:2019-08-20 19:30:19
【问题描述】:

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

【问题讨论】:

  • 为什么你不在这个元字段中只存储数字并稍后添加货币符号?这将使订购变得非常简单。

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


【解决方案1】:

理想情况下,您只需存储整数(或浮点)值,例如: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 添加到元查询别名,但没有以其他方式强制转换它 - 所以我不确定它如何处理美元符号、逗号和其他字符。

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

【讨论】:

  • 好的,我明白了。但是,如果我无法在没有货币符号和逗号的情况下存储数据怎么办?以后使用排序列表的替代方法会更好吗?如果是,那么您能否建议我如何对它们进行排序的算法或方法?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 2012-09-11
  • 2017-10-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
相关资源
最近更新 更多