Добавление контента в карточку товара Woocommerce

woocommerce

Для чего это может потребоваться? Причин много, например, нам нужно вывести дополнительную информацию, которая сообщит покупателю необходимые сведения для принятия решения о покупке.

В Woocommerce есть множество фильтров и действий для изменения стандартного поведения без вмешательства в сам плагин. Для вывода информации о товаре используется этот код (файл wp-template-hooks.php в файлах woocommerce):

/**
* Product Summary Box.
*
* @see woocommerce_template_single_title()
* @see woocommerce_template_single_rating()
* @see woocommerce_template_single_price()
* @see woocommerce_template_single_excerpt()
* @see woocommerce_template_single_meta()
* @see woocommerce_template_single_sharing()
*/
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 ); // заголовок
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 ); // рейтинг
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); // цена
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 ); // краткое описание
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 ); // рубрики и метки
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_sharing', 50 );

У всех действий стоит приоритет на вывод (что такое действия и как они работают можно почитать тут), чем больше число — тем позже будет задействовано действие.

Как видите, разработчики уже предусмотрели свободные места, если мы хотим вывести что-нибудь между заголовком и ценой — можем повесить свое действие между 5 и 10:

add_action( 'woocommerce_single_product_summary', 'my_theme_my_action', 6 );
function my_theme_my_action() { 
  // тут пишем, что же нам надо сделать 
}

А если нам нужно изменить порядок вывода?

Для этого мы можем изменить порядок действий, просто удалив нужное нам действие и заново зарегистрировав с новым приоритетом:

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 25 ); // выведем цену после короткого описания

Более подробно о функции remove_action() можно почитать здесь.

Вывод произвольного контента для определенной категории:

В этом коде учитываются дочерние категории (будет работать, только если не стоит галочка на родительской категории).

add_action( 'woocommerce_single_product_summary', 'my_theme_additional_info', 24 );
function my_theme_additional_info() {
  $term = get_the_terms( get_the_ID(), 'product_cat' );
  if( term_is_ancestor_of( 9, $term[0]->term_id, 'product_cat') != true ) {
    echo 'My additional info';
  }
}