Для чего это может потребоваться? Причин много, например, нам нужно вывести дополнительную информацию, которая сообщит покупателю необходимые сведения для принятия решения о покупке.
В 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';
}
}