Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Хуки каталога и страницы товара

Страницы магазина собраны из хуков. Шаблон страницы товара почти пуст: в нём вызовы do_action(), а название, цену и кнопку выводят функции WooCommerce, подключённые к этим хукам с разными приоритетами. Поэтому страницу меняют, не трогая шаблон: добавляют свою функцию, снимают стандартную или меняют порядок.

Код этого урока пишется в includes/storefront.php.

Добавить блок

// wp-content/plugins/acme-shop/includes/storefront.php
add_action('woocommerce_single_product_summary', function () {
    echo '<p class="acme-guarantee">Обмен и возврат в течение 30 дней.</p>';
}, 35);

Хук woocommerce_single_product_summary выводит правую колонку страницы товара. Приоритет 35 ставит абзац сразу под кнопкой «В корзину» — откройте любой товар, чтобы увидеть его.

Карта страницы товара

ХукПриоритетСтандартный блок
woocommerce_before_single_product_summary10Значок «Распродажа»
20Галерея картинок
woocommerce_single_product_summary5Название
10Рейтинг и цена
20Краткое описание
30Кнопка «В корзину»
40Артикул, категории, метки
50Кнопки «Поделиться»
woocommerce_after_single_product_summary10Вкладки: описание, отзывы
15Сопутствующие товары
20Похожие товары

Свой блок встаёт между стандартными, если выбрать приоритет между их числами: 25 — между описанием и кнопкой, 45 — после артикула.

Убрать блок

// wp-content/plugins/acme-shop/includes/storefront.php
add_action('init', function () {
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40);
    remove_action('woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
});

Со страницы товара исчезнут строка с артикулом и категориями и блок «Похожие товары». В remove_action() указывают тот же хук, ту же функцию и тот же приоритет, с которыми блок подключён.

Переставить блок

Перестановка — это снять и подключить заново с другим приоритетом:

// wp-content/plugins/acme-shop/includes/storefront.php
add_action('init', function () {
    remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 10);
    add_action('woocommerce_single_product_summary', 'woocommerce_template_single_price', 29);
});

Цена переедет из-под названия к кнопке «В корзину».

Карта плитки товара в каталоге

ХукПриоритетСтандартный блок
woocommerce_before_shop_loop_item10Открытие ссылки на товар
woocommerce_before_shop_loop_item_title10Значок «Распродажа» и картинка
woocommerce_shop_loop_item_title10Название
woocommerce_after_shop_loop_item_title5Рейтинг
10Цена
woocommerce_after_shop_loop_item5Закрытие ссылки
10Кнопка «В корзину»
// wp-content/plugins/acme-shop/includes/storefront.php
add_action('woocommerce_after_shop_loop_item_title', function () {
    global $product;
 
    if (!$product->is_in_stock()) {
        echo '<span class="acme-out">Нет в наличии</span>';
    }
}, 15);

На странице /shop/ под ценой товаров, которых нет на складе, появится пометка.

Хуки вокруг списка

ХукГде
woocommerce_before_main_contentПеред содержимым любой страницы магазина
woocommerce_before_shop_loopНад списком: число результатов и сортировка
woocommerce_after_shop_loopПод списком: постраничная навигация
woocommerce_no_products_foundКогда товаров не найдено

Частая ошибка

remove_action() вызывают на верхнем уровне файла или с неверным приоритетом — и блок остаётся на месте без каких-либо ошибок. Снимать можно только уже подключённую функцию и только с её приоритетом. Точные имя и число смотрите в файле woocommerce/includes/wc-template-hooks.php.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.