Как вывести поле ACF в письмо woocommerce

О том как добавить произвольные поля можно почитать в разделе Руководство по Advanced Custom Fields.

Сначала приведу пример кода, потом подробно его рассмотрим:

function the_custom_field( $item_id, $item, $order, $plain_text){
  if( $color = get_field( 'color', $item->get_product_id() )) {
    echo $color;
  }
}
add_action('woocommerce_order_item_meta_start', 'the_custom_field', 20, 4);

За вывод списка товаров в письме отвечает шаблон email-order-items.php. Если посмотреть в код, то мы увидим несколько хуков (такие места в коде, куда мы можем вклинить выполнение своих функций).

// allow other plugins to add additional product information here.
do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order, $plain_text );

// allow other plugins to add additional product information here.
do_action( 'woocommerce_order_item_meta_end', $item_id, $item, $order, $plain_text );

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

Далее, когда мы знаем какой хук использовать (например, woocommerce_order_item_meta_start) и какие параметры но принимает ($item_id, $item, $order, $plain_text), можем написать функцию вывода атрибута из ACF (тот код, который я привел в самом начале).

Поместить её нужно, как обычно, в файл functions.php вашей темы.

add_action('woocommerce_order_item_meta_start', 'the_custom_field', 20, 4); - эта строка связывает нашу функцию the_custom_field и хук woocommerce_order_item_meta_start.

Параметр "10" отвечает за приоритет. Если несколько функций привязано к хуку, то первым выведется тот, у которого это число меньше.

Параметр "4" отвечает за то, сколько параметров передается нашей функции из хука. Данный хук передает 4 параметра - $item_id, $item, $order, $plain_text. И эти же параметры мы указываем при создании функции function the_custom_field( $item_id, $item, $order, $plain_text)

Теперь посмотрим, что происходит внутри:

if( $color = get_field( 'color', $item->get_product_id() )) {
  echo $color;
}

Тут буквально написано, что мы получаем поле с именем color для товара с id равным $item->get_product_id(). И если такое поле существует, то выводим его содержимое. Можете подробнее прочитать про Описание функции get_field()

Если мы заглянем в файлы шаблонов WooCommerce, то увидим, что этот Хук содержится не только в шаблоне письма, но и в шаблонах оформления заказа, и на странице, которая выводится с подтверждением, после оформления заказа. То есть внеся изменения через хук информация в форме заказа и далее в цепочке заказа обновится автоматически. Это надо помнить и при необходимости поменять шаблоны.

© 2016 — 2020. При копировании материалов обязательна активная индексируемая ссылка на источник.