Изменение имен позиций корзины WooCommerce

Цель состоит в том, чтобы изменить название элемента, поскольку оно передается нашему платежному шлюзу, но оставляйте его как есть для отображения на наших страницах продукта.

Я пробовал это в моих functions.php:

function change_item_name( $item_name, $item ) { $item_name = 'mydesiredproductname'; return $item_name; } add_filter( 'woocommerce_order_item_name', 'change_item_name', 10, 1 ); 

Но, похоже, это не работает для меня. Я чувствую, что мне нужно передать фактический идентификатор предмета или что-то в этом роде. Я немного потерялся.

Любая информация о том, что я делаю неправильно здесь, будет очень признательна.

благодаря

woocommerce_order_item_name фильтра woocommerce_order_item_name является интерфейсным крюком и расположен в:

1) Шаблоны WooCommerce:

  • электронная почта / обычный / электронный заказ-items.php
  • шаблоны / заказ / заказ-деталь-item.php
  • шаблоны / выписка / форма-pay.php
  • шаблоны / письмо / электронный заказ-items.php

2) Основной файл WooCommerce:

  • включает / класс-туалет структурированного-data.php

Каждый из них имеет первый аргумент $ item_name, а другой для других аргументов.
См. Здесь для более подробной информации …

У вас есть 2 аргумента, установленные в вашей функции (вторая неверна для всех шаблонов), и вы объявляете только один из ваших крючков. Я проверил код ниже:

 add_filter( 'woocommerce_order_item_name', 'change_orders_items_names', 10, 1 ); function change_orders_items_names( $item_name ) { $item_name = 'mydesiredproductname'; return $item_name; } 

И это работает

  • Страница «Заказ-получение (Спасибо)»,
  • Уведомления по электронной почте
  • и Мои учетные записи> Сведения о едином заказе

Но НЕ в папке редактирования корзины, оформления заказа и бэкэнд.

Поэтому, если вам нужно заставить его работать с Cart и Checkout, вы должны использовать другие крючки, такие как woocommerce_before_calculate_totals .
Затем вы можете использовать WC_Product methods (setter и getters).

Вот ваш новый код

 add_filter( 'woocommerce_before_calculate_totals', 'custom_cart_items_prices', 10, 1 ); function custom_cart_items_prices( $cart_object ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Iterating through cart items foreach ( $cart_object->get_cart() as $cart_item ) { // Get an instance of the WC_Product object $wc_product = $cart_item['data']; // Get the product name (WooCommerce versions 2.5.x to 3+) $original_name = method_exists( $wc_product, 'get_name' ) ? $wc_product->get_name() : $wc_product->post->post_title; // SET THE NEW NAME $new_name = 'mydesiredproductname'; // Set the new name (WooCommerce versions 2.5.x to 3+) if( method_exists( $wc_product, 'set_name' ) ) $wc_product->set_name( $new_name ); else $wc_product->post->post_title = $new_name; } } 

Код отправляется в любой php-файл вашей активной дочерней темы (или темы), а также в любой файл php-плагина.

Теперь вы меняете имена везде, кроме архивов магазинов и страниц продуктов …

Этот код протестирован и работает с версией WooCommerce с версии 2.5.x до 3.1+

Если вы хотите сохранить оригинальные имена элементов в корзине, вы должны добавить этот условный тег WooCommerce внутри функции:

 if( ! is_cart() ){ // The code } 

Этот ответ был обновлен 1 августа 2017 года, чтобы получить совместимость с предыдущими версиями woocommerce …