【问题标题】:Rename multiple order statuses in Woocommerce在 Woocommerce 中重命名多个订单状态
【发布时间】:2018-05-27 04:41:40
【问题描述】:

我正在尝试通过编辑主题的 functions.php 文件来重命名多个 WooCommerce 订单状态。几年前我发现这里发布的一些代码可以更改单个订单状态,但由于我对 php 非常缺乏经验,我不知道如何扩展它以更改多个状态。理想情况下,我还想将“wc-processing”重命名为“Paid”,将“wc-on-hold”重命名为“Pending”。

这是我找到的用于编辑单个订单状态的代码:

function wc_renaming_order_status( $order_statuses ) {
    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;
        if ( 'wc-completed' === $key ) {
            $order_statuses['wc-completed'] = _x( 'Order Received', 'Order status', 'woocommerce' );
        }
    }
    return $order_statuses;
}
add_filter( 'wc_order_statuses', 'wc_renaming_order_status' );

有人知道我需要进行哪些更改才能更改其他状态吗?

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

    由于存在待处理订单状态,您还需要重命名现有的“待处理”状态。如果没有,您将获得 2 个不同的状态,带有相同的“待处理”标签。

    首先重命名这些订单状态:

    add_filter( 'wc_order_statuses', 'rename_order_statuses', 20, 1 );
    function rename_order_statuses( $order_statuses ) {
        $order_statuses['wc-completed']  = _x( 'Order Received', 'Order status', 'woocommerce' );
        $order_statuses['wc-processing'] = _x( 'Paid', 'Order status', 'woocommerce' );
        $order_statuses['wc-on-hold']    = _x( 'Pending', 'Order status', 'woocommerce' );
        $order_statuses['wc-pending']    = _x( 'Waiting', 'Order status', 'woocommerce' );
    
        return $order_statuses;
    }
    

    并且还在批量编辑订单列表下拉列表中:

    add_filter( 'bulk_actions-edit-shop_order', 'custom_dropdown_bulk_actions_shop_order', 20, 1 );
    function custom_dropdown_bulk_actions_shop_order( $actions ) {
        $actions['mark_processing'] = __( 'Mark paid', 'woocommerce' );
        $actions['mark_on-hold']    = __( 'Mark pending', 'woocommerce' );
        $actions['mark_completed']  = __( 'Mark order received', 'woocommerce' );
    
        return $actions;
    }
    

    这也是需要的(对于顶部菜单):

    foreach( array( 'post', 'shop_order' ) as $hook )
        add_filter( "views_edit-$hook", 'shop_order_modified_views' );
    
    function shop_order_modified_views( $views ){
        if( isset( $views['wc-completed'] ) )
            $views['wc-completed'] = str_replace( 'Completed', __( 'Order Received', 'woocommerce'), $views['wc-completed'] );
    
        if( isset( $views['wc-processing'] ) )
            $views['wc-processing'] = str_replace( 'Processing', __( 'Paid', 'woocommerce'), $views['wc-processing'] );
    
        if( isset( $views['wc-on-hold'] ) )
            $views['wc-on-hold'] = str_replace( 'On hold', __( 'Pending', 'woocommerce'), $views['wc-on-hold'] );
    
        if( isset( $views['wc-pending'] ) )
            $views['wc-pending'] = str_replace( 'Pending', __( 'Stucked', 'woocommerce'), $views['wc-pending'] );
    
        return $views;
    }
    

    (感谢brasofiloChange WP admin post status filter for custom post type

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

    从 Woocommerce 3.3 开始处理管理订单列表中的预览弹出窗口(眼睛符号):

    Replace order status names everywhere incl. Woocommerce admin order preview

    【讨论】:

    • 这很好用。但是,如果字符串已被翻译,“子菜单”(ul.subsubsub) 将使用翻译后的字符串而不是新分配的字符串。
    • @PatrikAlienus 这取决于很多事情(比如是否使用插件进行翻译)......
    • 我没有使用插件来翻译它,只是语言目录中的 .mo 文件。
    • @PatrikAlienus 您可以尝试通过增加挂钩优先级来尝试:add_filter( "views_edit-$hook", 'shop_order_modified_views', 1000 );
    猜你喜欢
    • 2016-10-13
    • 2017-01-18
    • 2017-05-24
    • 1970-01-01
    • 2017-01-19
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多