为了账号安全,请及时绑定邮箱和手机立即绑定

在 WooCommerce 产品排序中添加按库存数量排序

在 WooCommerce 产品排序中添加按库存数量排序

PHP
素胚勾勒不出你 2023-05-26 16:15:18
我已将以下代码添加到我的主题中functions.php。“可用性”排序选项确实显示,但当我选择它时,它是按标题排序的,而不是库存数量。我也尝试过使用stock_quantityas a 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;}
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

最后更新: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 );



查看完整回答
反对 回复 2023-05-26
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信