首页 文章

重命名WooCommerce订单状态

提问于
浏览 1412
4

我想将WooCommerce订单状态从“已完成”重命名为“已收到订单” . 我可以编辑位于wc-order-functions.php下面的脚本,但我不想修改任何核心文件或使用插件 .

是否可以使用子主题的 functions.php 文件中的脚本覆盖woocoomerce函数?

function wc_get_order_statuses() {
  $order_statuses = array(
    'wc-pending'    => _x( 'Pending Payment', 'Order status', 'woocommerce' ),
    'wc-processing' => _x( 'Processing', 'Order status', 'woocommerce' ),
    'wc-on-hold'    => _x( 'On Hold', 'Order status', 'woocommerce' ),
    'wc-completed'  => _x( 'Completed', 'Order status', 'woocommerce' ),
    'wc-cancelled'  => _x( 'Cancelled', 'Order status', 'woocommerce' ),
    'wc-refunded'   => _x( 'Refunded', 'Order status', 'woocommerce' ),
    'wc-failed'     => _x( 'Failed', 'Order status', 'woocommerce' ),
  );
  return apply_filters( 'wc_order_statuses', $order_statuses );
}

3 回答

  • 8

    只需将订单状态"Completed"重命名为"Order Received",这很简单,可以通过 wc_order_statuses hook以这种方式完成(您将此片段粘贴到您的活动子主题 function.php 文件中):

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

    代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 .

    更新2018 - 要重命名,请在订单列表页面中:•批量操作下拉列表•订单状态选项卡(带计数)请参阅:重命名Woocommerce中的多个订单状态

    其他相关参考:How to create a custom order status in woocommerce

  • 1

    我有一个类似的愿望,但由于某种原因,Loic的解决方案不适用于我的商店 . 所以我想分享我的简单解决方案 .

    使用免费插件 LocoTranslate ,您可以轻松地重命名您的语言的订单状态 . 如果您的页面不需要翻译(即使用英语),它可能仍然很方便 .

    只需创建一个全新的翻译文件,只输入替换原始名称的新订单状态 . 如果字段保持为空,则所有其他术语不受此语言文件的影响(不要忘记在页面设置中激活此伪翻译) .

    这样, WooCommerce 更新很可能不会影响它 .

  • 1

    接受的答案在大多数地方都做得很好,但主要订单页面上的订单状态过滤器不受影响,如其中一条评论中所述 .

    要更新这个,您还必须挂钩过滤器woocommerce_register_shop_order_post_statuses并更新label_count,如下所示:

    // Rename order status 'Completed' to 'Order Received' in admin main view - different hook, different value than the other places
    function wc_rename_order_status_type( $order_statuses ) {
        foreach ( $order_statuses as $key => $status ) {
            $new_order_statuses[ $key ] = $status;
            if ( 'wc-completed' === $key ) {
                $order_statuses['wc-completed']['label_count'] = _n_noop( 'Order Received <span class="count">(%s)</span>', 'Order Received <span class="count">(%s)</span>', 'woocommerce' );
            }
        }
        return $order_statuses;
    }
    add_filter( 'woocommerce_register_shop_order_post_statuses', 'wc_rename_order_status_type' );
    

    您还需要在“批量操作”下拉列表中更新字符串 . 连接到WordPress的gettext过滤器让你这样做,就像这样:

    // Rename order status in the bulk actions dropdown on main order list
    function rename_bulk_status( $translated_text, $untranslated_text, $domain ) {
        if( is_admin()) {
            if( $untranslated_text == 'Change Status To completed' )
                $translated_text = __( 'Change Status To Order Received','woocommerce' );
        }
        return $translated_text;
    }
    
    add_filter('gettext', 'rename_bulk_status', 20, 3);
    

    所以将这些添加到上面接受的答案中,这样你就拥有了所有3个功能

相关问题