【问题标题】:Add sorting by stock quantity in WooCommerce products sort by在 WooCommerce 产品中添加按库存数量排序
【发布时间】:2020-10-02 18:51:58
【问题描述】:

我已将以下代码添加到我的主题 functions.php

确实会显示“可用性”排序选项,但是当我选择它时,它是按标题排序的,而不是按库存数量排序。

我还尝试将stock_quantity 用作meta_key(即使它不是元数据),但也没有用。

add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( 'availability' == $orderby_value ) {
        $args['orderby'] = 'stock_quantity';
        $args['order'] = 'DESC';
        $args['meta_key'] = '';
    }
    return $args;
}

add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['availability'] = 'Availability';
    return $sortby;
}

【问题讨论】:

    标签: php wordpress sorting woocommerce product


    【解决方案1】:

    最后更新:02/22 - 在 WordPress 5.9.1 和 WooCommerce 6.1.1 中测试

    代码进入活动子主题(或活动主题)的functions.php文件中。


    改用['meta_key'] = '_stock' & ['orderby'] = 'meta_value_num'

    所以你得到:

    // Ordering products based on the selected values
    function filter_woocommerce_get_catalog_ordering_args( $args, $orderby, $order ) {    
        switch( $orderby ) {
            case 'availability':
                $args['orderby']  = 'meta_value_num';
                $args['order']    = 'DESC';
                $args['meta_key'] = '_stock';
                break;
        }
    
        return $args;
    }
    add_filter( 'woocommerce_get_catalog_ordering_args', 'filter_woocommerce_get_catalog_ordering_args', 10, 3 );
    
    // Orderby setting
    function filter_orderby( $orderby ) {
        $orderby['availability'] = __( 'Availability', 'woocommerce' );
        return $orderby;
    }
    add_filter( 'woocommerce_default_catalog_orderby_options', 'filter_orderby', 10, 1 );
    add_filter( 'woocommerce_catalog_orderby', 'filter_orderby', 10, 1 );
    
    // Optional: use for debug purposes (display stock quantity) 
    function action_woocommerce_after_shop_loop_item() {
        global $product;
        echo '<div style="color: red !important; font-size: 20px !important;">' . wc_get_stock_html( $product ) . '</div>';
    }
    add_action( 'woocommerce_after_shop_loop_item', 'action_woocommerce_after_shop_loop_item', 9, 0 );
    

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 2018-11-28
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      相关资源
      最近更新 更多