web-dev-qa-db-ja.com

WooCommerceの注文ステータスの名前を変更する

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 );
}
8
Kevin

注文ステータスの名前を「完了」から「注文受領済み」に変更するだけで、簡単で、wc_order_statusesフックを使用してこの方法で実行できます(このスニペットをアクティブな子テーマ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の複数の注文ステータスの名前を変更

その他の関連資料: woocommerceでカスタムオーダーステータスを作成する方法

15
LoicTheAztec

受け入れられた回答はほとんどの場所でうまく機能しますが、コメントの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つの機能すべてを使用できるようにします。

1
Simon C

私も同じような願いを持っていましたが、どういうわけかロイックの解決策は私の店ではうまくいきませんでした。だから私は私の簡単な解決策を共有したいと思います。

無料のプラグインLocoTranslateを使用すると、言語の注文ステータスの名前を簡単に変更できます。あなたのページが翻訳を必要としない場合(つまり、それが英語である場合)、それはまだ便利かもしれません。

まったく新しい翻訳ファイルを作成し、元の名前を置き換える新しい注文ステータスのみを入力するだけです。フィールドが空のままの場合、他のすべての用語はこの言語ファイルの影響を受けません(ページ設定でこの疑似翻訳をアクティブにすることを忘れないでください)。

このように、WooCommerceの更新が影響を与えない可能性が高くなります。

1
Michael Leser