在 Woocommerce 中添加一个新的自定义默认订购目录选项 [英] Add a new custom default ordering catalog option in Woocommerce

查看:19
本文介绍了在 Woocommerce 中添加一个新的自定义默认订购目录选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试按 SKU 订购 Woocommerce 的默认订单.我已经更改了 woocommerce 设置中的顺序并添加了这样的 SKU:

I am trying to get the default order of Woocommerce to be order by SKU. I have changed the order in the woocommerce settings and added SKU like this:

function sv_add_sku_sorting( $args ) {

    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

    if ( 'sku' == $orderby_value ) {
        $args['orderby'] = 'meta_value';
        $args['order'] = 'asc';
        // ^ lists SKUs alphabetically 0-9, a-z; change to desc for reverse alphabetical
        $args['meta_key'] = '_sku';
    }

    return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'sv_add_sku_sorting' );

function sv_sku_sorting_orderby( $sortby ) {
    $sortby['sku'] = 'Sorteer op referentie';
    // Change text above as desired; this shows in the sorting dropdown
    return $sortby;
}
add_filter( 'woocommerce_catalog_orderby', 'sv_sku_sorting_orderby' );
add_filter( 'woocommerce_default_catalog_orderby_options', 'sv_sku_sorting_orderby' );

在页面加载时,它仍然根据受欢迎程度而不是 SKU 进行排序.但下拉菜单显示按 SKU 排序(Sorteer op referentie)

On pageload it still orders on popularity instead of on SKU. But the dropdown shows order by SKU (Sorteer op referentie)

如果我去另一个订购并返回,它会在查询字符串中使用 ?orderby=sku 正确订购它们.

If I go to another ordering and go back it will correctly order them with ?orderby=sku in the querystring.

推荐答案

更新 (2018 年 12 月)

您没有以正确的方式使用正确的钩子来获取 sku 的默认订购目录.还缺少一些需要的附加代码:

You are not using the right hooks in the right way to get default ordering catalog by sku. There is also some missing needed additional code:

add_filter( 'woocommerce_get_catalog_ordering_args', 'enable_catalog_ordering_by_sku' );
function enable_catalog_ordering_by_sku( $args ) {

    if ( isset( $_GET['orderby'] ) ) {
        if ( 'sku' == $_GET['orderby'] ) {
            return array(
                'orderby'  => 'meta_value_num',
                'order'    => 'ASC',
                'meta_key' => '_sku',
            );
        }
        // Make a clone of "menu_order" (default option)
        elseif ( 'natural_order' == $_GET['orderby'] ) {
            return array( 'orderby'  => 'menu_order title', 'order' => 'ASC' );
        }
    }

    return $args;
}

add_filter( 'woocommerce_catalog_orderby', 'add_catalog_orderby_by_sku' );
function add_catalog_orderby_by_sku( $orderby_options ) {
    // Insert "Sort by product reference (sku)" and the clone of "menu_order"
    return array(
        'sku'           => __("Sort by product reference (sku)", "woocommerce"),
        'natural_order' => __("Sort by natural shop order", "woocommerce"), // <== To be renamed at your convenience
    ) + $orderby_options ;
}


add_filter( 'woocommerce_default_catalog_orderby', 'default_catalog_orderby_sku' );
function default_catalog_orderby_sku( $default_orderby ) {
    return 'sku';
}

add_action( 'woocommerce_product_query', 'product_query_by_sku' );
function product_query_by_sku( $q ) {
    if ( ! isset( $_GET['orderby'] ) && ! is_admin() ) {
        $q->set( 'orderby', 'meta_value_num' );
        $q->set( 'order', 'ASC' );
        $q->set( 'meta_key', '_sku');
    }
}

代码位于活动子主题(或活动主题)的 functions.php 文件中.经测试有效.

Code goes in functions.php file of your active child theme (or active theme). Tested and works.

相关:按 SKU 数字对 WooCommerce 产品进行排序 (1.2.3.4.5.6........)

这篇关于在 Woocommerce 中添加一个新的自定义默认订购目录选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆