我有一个插件,用于根据自定义字段对 Wordpress 帖子进行排序。该字段是价格字段。该插件适用于所有使用欧元和美元的国家。我有一个来自荷兰的客户,他使用欧元但有特殊字符来定义美分。这些特殊字符在插件中引发了排序错误。
以下是按价格检索和排序的 MySQL 代码:
function price_sort_it() {
global $wpdb, $thisorder;
if($thisorder == 'price-lowest') {
$this_order = 'ASC';
}
else if($thisorder == 'price-highest') {
$this_order = 'DESC';
}
return "(SELECT CAST(REPLACE(REPLACE(REPLACE($wpdb->postmeta.meta_value, ',', ''), '€',''),' ','') AS SIGNED)
FROM $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'ad_price')" . $this_order;
}
add_filter('posts_orderby', 'price_sort_it');
此代码删除了千位逗号分隔符,还删除了排序前的货币符号。它完美无缺。
问题是荷兰客户的广告价格如下:
- 5 欧元
- 5欧元,-
- 5,00 欧元
连同正常值,例如:
- 10,000 欧元
- 500.29 欧元
- 10 欧元
其中逗号表示小数,逗号和负数表示小数和 2 个零的缩写。
关于如何应对这一壮举的明智之举?