Php 在Woocommerce中添加新的自定义默认订购目录选项

Php 在Woocommerce中添加新的自定义默认订购目录选项,php,wordpress,woocommerce,product,sku,Php,Wordpress,Woocommerce,Product,Sku,我正在尝试将Woocommerce的默认订单设置为按SKU排序。 我在woocommerce设置中更改了订单,并添加了如下SKU: function sv_add_sku_sorting( $args ) { $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option

我正在尝试将Woocommerce的默认订单设置为按SKU排序。 我在woocommerce设置中更改了订单,并添加了如下SKU:

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' );
在pageload上,它仍然根据受欢迎程度而不是SKU订购。 但下拉列表显示按SKU排序的订单(分拣机操作参考)

如果我转到另一个订购并返回,它将在查询字符串中使用?orderby=sku正确订购。

更新(2018年12月)

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

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');
    }
}
add_filter('woocommerce_get_catalog_ordering_args','enable_catalog_ordering_by_sku');
功能启用按sku排序的目录($args){
if(isset($\u GET['orderby'])){
如果('sku'=$\u GET['orderby']){
返回数组(
'orderby'=>'meta_value_num',
“订单”=>“ASC”,
“元密钥”=>“\u sku”,
);
}
//复制“菜单顺序”(默认选项)
elseif('natural\u order'=$\u GET['orderby']){
返回数组('orderby'=>'菜单\订单标题','order'=>'ASC');
}
}
返回$args;
}
添加过滤器('woocommerce\u catalog\u orderby'、'add\u catalog\u orderby\u by\u sku');
函数add\u catalog\u orderby\u by\u sku($orderby\u选项){
//插入“按产品参考(sku)排序”和“菜单\订单”的克隆
返回数组(
“sku”=>““按产品参考(sku)排序”,“woocommerce”),
'natural_order'=>'Sort by natural shop order',//set('orderby','meta_value_num');
$q->set('order','ASC');
$q->set('meta_key','u sku');
}
}
代码放在活动子主题(或活动主题)的functions.php文件中。经过测试,效果良好

相关:

更新(2018年12月)

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

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');
    }
}
add_filter('woocommerce_get_catalog_ordering_args','enable_catalog_ordering_by_sku');
功能启用按sku排序的目录($args){
if(isset($\u GET['orderby'])){
如果('sku'=$\u GET['orderby']){
返回数组(
'orderby'=>'meta_value_num',
“订单”=>“ASC”,
“元密钥”=>“\u sku”,
);
}
//复制“菜单顺序”(默认选项)
elseif('natural\u order'=$\u GET['orderby']){
返回数组('orderby'=>'菜单\订单标题','order'=>'ASC');
}
}
返回$args;
}
添加过滤器('woocommerce\u catalog\u orderby'、'add\u catalog\u orderby\u by\u sku');
函数add\u catalog\u orderby\u by\u sku($orderby\u选项){
//插入“按产品参考(sku)排序”和“菜单\订单”的克隆
返回数组(
“sku”=>““按产品参考(sku)排序”,“woocommerce”),
'natural_order'=>'Sort by natural shop order',//set('orderby','meta_value_num');
$q->set('order','ASC');
$q->set('meta_key','u sku');
}
}
代码放在活动子主题(或活动主题)的functions.php文件中。经过测试,效果良好

相关的: