【问题标题】:Changing default catalog orderby removes menu_order option in WooCommerce更改默认目录 orderby 会删除 WooCommerce 中的 menu_order 选项
【发布时间】:2020-11-17 05:01:25
【问题描述】:

我正在尝试更改默认 order by 的名称,为 name 添加新 order by,并删除几个不相关的默认选项:

// Remove the other sort order options and add and rename 1
add_filter('woocommerce_catalog_orderby', 'change_default_sorting_options');
function change_default_sorting_options($options)
{
    unset($options['popularity']);
    unset($options['rating']);
    unset($options['date']);
    unset($options['price']);
    unset($options['price-desc']);
    $options['name'] = 'Sort by Name';
    $options['menu_order'] = 'Catalog Sort Order';
    return $options;
}

这很好用。默认是 menu_order 选项。

然后,当类别为“20 Gauge”时,我希望目录按“名称”排序。添加此代码结果会按名称对“20 Gauge”类别进行排序,但会从排序顺序下拉列表中删除默认选项 (menu_order):

add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');
function custom_default_catalog_orderby()
{
    if (is_product_category(array('20-gauge'))) {
        return 'name'; // sort by latest
    } else {
        return 'menu_order';
    }
} 

【问题讨论】:

    标签: php wordpress sorting woocommerce hook-woocommerce


    【解决方案1】:

    你还需要一点魔术。尝试以下重新访问的代码:

    // Remove the other sort order options and add and rename 1
    add_filter( 'woocommerce_catalog_orderby', 'change_default_sorting_options' );
    function change_default_sorting_options( $options ){
        unset($options['popularity'], $options['rating'], $options['date' ], $options['price'], $options['price-desc']);
    
        $menu_order      = __('Catalog Sort Order');
        $options['name'] = __('Sort by Name');
    
        if ( is_product_category( array( '20-gauge') ) ) {
            $options[ 'menu_order2' ] = $menu_order;
        } else {
            $options[ 'menu_order' ] = $menu_order;
        }
        return $options;
    }
    
    add_filter( 'woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby' );
    function custom_default_catalog_orderby( $orderby ) {
        if (is_product_category( array( '20-gauge') ) ) {
            $orderby = 'name'; // sort by latest
        }
        return $orderby;
    
    }
    
    add_filter( 'woocommerce_get_catalog_ordering_args', 'enable_non_default_sorting_by_menu_order' );
    function enable_non_default_sorting_by_menu_order( $args ) {
        if ( isset( $_GET['orderby'] ) && 'menu_order2' == $_GET['orderby'] ) {
            $args['orderby']  = 'menu_order title';
        }
        return $args;
    }
    

    代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    【讨论】:

    • @April 如果这个答案回答了你的问题,你可以请accept 回答(如果你喜欢/想要你甚至可以upvotet 它也),谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 2015-09-29
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多