Я хотел бы переименовать статус заказа WooCommerce из «Завершено» в «Принятый заказ». Я могу отредактировать скрипт ниже, расположенный в wc-order-functions.php, но я бы предпочел не изменять какие-либо файлы ядра или использовать плагин.
Можно ли переопределить функции woocoomerce со сценариями в файле functions.php
дочерней темы?
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 ); }
Просто переименовать статус заказа «Завершено» на «Принятый заказ», это легко и может быть достигнуто с помощью wc_order_statuses
hook (вы вставьте этот фрагмент в активный файл wc_order_statuses
дочерней темы):
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' );
Справка: Как создать статус пользовательского заказа в woocommerce
У меня было подобное желание, но по какой-то причине решение Лойка не работало с моим магазином. Поэтому я хочу поделиться своим простым решением.
С помощью бесплатного плагина LocoTranslate
вы можете легко переименовать статус заказа для своего языка. Если ваша страница не нуждается в переводе (то есть на английском языке), она может по-прежнему быть удобной.
Просто создайте совершенно новый файл перевода и введите только новый статус заказа, заменив исходное имя. Все остальные термины не затрагиваются этим языковым файлом, если поля остаются пустыми (не забудьте активировать этот псевдо-перевод в настройках страницы).
Таким образом, есть хорошие шансы, что обновления WooCommerce
не повлияют на него.
Принятый ответ хорошо работает в большинстве мест, но фильтр статуса заказа на главной странице заказа не затрагивается, как указано в одном из комментариев.
Чтобы обновить это, вы также должны подключиться к фильтру 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' );
Вам также потребуется обновить строку в раскрывающемся списке «Массовые действия». Подключившись к фильтру gettext WordPress, давайте сделаем это, например:
// 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 функции.