当选择按价格排序的选项(Woocommerce下拉列表)时,产品要按价格排序,但它不能正常工作; 前6个分类:
链接到未完成的网站: http://verduijncichlids.com/product-categorie/vissen-voorraad/west-afrika-cichliden/?orderby=price
任何人都知道发生了什么以及如何解决这个问题? 干杯!
答案 0 :(得分:1)
当您使用数字元数据进行排序时,您需要使用meta_value_num
,否则它将作为字符串进行比较,否则因为后元值将作为字符串存储在数据库中。
$args = array(
'meta_key' => 'price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$query = new WP_Query( $args );
答案 1 :(得分:1)
如果在WooCommerce中按价格订购不能正常工作,那么安全的解决方案始终是自定义WooCommerce处理按价格订购的方式。之所以可行,是因为WooCommerce price
和price-desc
是默认的订购选项。 (在WordPress v5.4.1和WooCommerce v4.1.0中使用标准主题进行了测试):
在您的functions.php中添加:
/**
* Customize ordering by price
*/
add_filter('woocommerce_get_catalog_ordering_args', function ($args) {
$orderby_value = isset($_GET['orderby']) ? wc_clean($_GET['orderby']) : apply_filters('woocommerce_default_catalog_orderby', get_option('woocommerce_default_catalog_orderby'));
if ('price' == $orderby_value) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'ASC';
$args['meta_key'] = '_price';
}
if ('price-desc' == $orderby_value) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = '_price';
}
return $args;
});
就像@Pelmered提到的那样,使用meta_value_num
作为'order_by'选项很重要,因此排序是通过数字值而不是字符串值完成的。我将meta_key
更改为'_price',因为在上面使用和提及的WooCommerce版本中,这是必需的。
进一步阅读:
答案 2 :(得分:0)
似乎正确排序。查看特色产品,因为它们具有优先权。
答案 3 :(得分:0)
您应该将Woocommerce插件更新为最新版本。这是插件中的错误,或者您可能已更改了核心功能。
更新帮助我很好地解决了这个问题和其他几个问题。
答案 4 :(得分:0)
对于可能会遇到此问题的任何人
根据: https://woocommerce.wordpress.com/2019/04/01/performance-improvements-in-3-6/
如果您使用“ WP All Import”等工具导入产品,则必须在以下位置重新生成“产品查找表”:
WooCommerce>状态>工具>产品查找表