WooCommerce按价格排序不正常

时间:2017-11-01 14:06:01

标签: wordpress woocommerce

当选择按价格排序的选项(Woocommerce下拉列表)时,产品要按价格排序,但它不能正常工作; 前6个分类:

  • €1,50
  • €11,75
  • €1,75
  • €1,75
  • €2,95
  • €4,50

链接到未完成的网站: http://verduijncichlids.com/product-categorie/vissen-voorraad/west-afrika-cichliden/?orderby=price

任何人都知道发生了什么以及如何解决这个问题? 干杯!

5 个答案:

答案 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 priceprice-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版本中,这是必需的。

进一步阅读:

WordPress Documentation WP_Query

WooCommerce Documentation Custom sorting options

答案 2 :(得分:0)

似乎正确排序。查看特色产品,因为它们具有优先权。

答案 3 :(得分:0)

您应该将Woocommerce插件更新为最新版本。这是插件中的错误,或者您可能已更改了核心功能。

更新帮助我很好地解决了这个问题和其他几个问题。

答案 4 :(得分:0)

对于可能会遇到此问题的任何人

根据: https://woocommerce.wordpress.com/2019/04/01/performance-improvements-in-3-6/

如果您使用“ WP All Import”等工具导入产品,则必须在以下位置重新生成“产品查找表”:

  

WooCommerce>状态>工具>产品查找表