【问题标题】:Renaming WooCommerce Order Status重命名 WooCommerce 订单状态
【发布时间】:2016-10-13 22:29:28
【问题描述】:

我想将 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 );
}

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

    转到插件编辑器 -> 选择 WooCommerce -> 包含 -> 管理员 -> class-wc-admin-dashboard.php(编辑第 45 行)

    请勿从此处复制粘贴内容。查找和替换

    默认-----------

    public function init() {
                // Reviews Widget.
                if ( current_user_can( 'publish_shop_orders' ) && post_type_supports( 'product', 'comments' ) ) {
                    wp_add_dashboard_widget( 'woocommerce_dashboard_recent_reviews', __( 'WooCommerce Recent Reviews', 'woocommerce' ), array( $this, 'recent_reviews' ) );
                }
                wp_add_dashboard_widget( 'woocommerce_dashboard_status', __( 'WooCommerce Status', 'woocommerce' ), array( $this, 'status_widget' ) );
    

    已编辑--------------

    public function init() {
                // Reviews Widget.
                if ( current_user_can( 'publish_shop_orders' ) && post_type_supports( 'product', 'comments' ) ) {
                    wp_add_dashboard_widget( 'woocommerce_dashboard_recent_reviews', __( 'WooCommerce Recent Reviews', 'woocommerce' ), array( $this, 'recent_reviews' ) );
                }
                wp_add_dashboard_widget( 'woocommerce_dashboard_status', __( 'Shop Status', 'woocommerce' ), array( $this, 'status_widget' ) );
    

    【讨论】:

      【解决方案2】:

      只需将订单状态“已完成”重命名为“已收到订单”,这很简单,并且可以使用 wc_order_statuses 挂钩以这种方式完成(您将将此 sn-p 粘贴到您的活动子主题 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 年更新 - 在订单列表页面中重命名:
      • 批量操作下拉
      • 订单状态标签(带有计数)
      见:Rename multiple order statuses in Woocommerce

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

      【讨论】:

      • 我首先收到一条错误消息,但我做了一个小改动,就成功了。我不得不将结尾“,”更改为“;” on: $order_statuses['wc-completed'] = _x('订单已收到', '订单状态', 'woocommerce' );谢谢!
      • @Kevin Ah 是的,抱歉打错了……我已经更新了我的答案……谢谢:)
      • @LoicTheAztec 效果很好,但是,我不知道如何在“订单”标题下的可用状态列表中显示重命名的名称,全部 (15) |暂停(10)等,但标题没有重命名,有什么解决方法的想法吗?
      • 呃,您的代码是否需要关于 $new_order_statuses 的行,甚至完全需要循环?如果你只有重命名 wc-completed 的那一行,它还能工作吗?也许不正常。否则,new_order_statuses 行看起来已经过时了,除非您创建并返回该数组。
      • 致各位,有关订单状态重命名的更完整和全面的答案请参阅:Rename multiple order statuses in Woocommerce
      【解决方案3】:

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

      要更新它,您还必须连接到过滤器 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 个功能。

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-01-18
          • 1970-01-01
          • 2017-05-24
          • 1970-01-01
          • 2017-04-02
          • 1970-01-01
          • 2017-01-19
          • 2016-04-17
          • 1970-01-01
          相关资源
          最近更新 更多