Как настроить индивидуальное отображение для архивов WooCommerce и страниц категорий товаров?
Что сделано
Привет! Я понимаю, что мой вопрос тесно связан с распространенными вопросами о WooCommerce.
Я использовал различные хуки и фильтры WooCommerce, а также создавал копии оригинальных файлов шаблонов в дочерней теме в папке woocommerce/.
Это работает, и я могу вносить изменения для интеграции WooCommerce в свою тему.
Что я пытаюсь сделать
WooCommerce использует archive-product.php для отображения категорий товаров. Этот же шаблон используется для отображения товаров в категории.
Я хочу стилизовать страницу товаров совсем иначе, чем страницу категории, и создать другой шаблон архива для отображения товаров категории
Я думаю, что лучшим вариантом будет использование нового шаблона products-product.php. Мне очень интересно глубже изучить плагин, поэтому я стараюсь избегать быстрых CSS-исправлений и хочу научиться использовать файлы шаблонов и хуки.
Буду очень признателен за советы или указание правильного направления.

Обычно в WordPress можно указать загрузку другого шаблона. Чаще всего для этого используются хуки template_redirect
или template_include
. Предпочтительнее использовать template_include
, как описано в этой статье. Вот пример того, как это можно реализовать:
Код:
// загружаем шаблон архива категорий WooCommerce
add_filter( 'template_include', 'wpse138858_woocommerce_category_archive_template' );
function wpse138858_woocommerce_category_archive_template( $original_template ) {
// загружаем шаблон условно, только если находимся в архиве категорий WooCommerce
if ( is_product_category() ) {
// сначала нужно создать шаблон, который вы хотите использовать
return get_template_directory().'/woocommerce-category-archive.php';
} else {
return $original_template;
}
}
Дополнительная информация:
Примечания:
- не тестировалось
- Для WooCommerce может существовать более специфичный способ в зависимости от того, как они обрабатывают загрузку шаблонов. Для этого вам нужно углубиться в изучение кода WooCommerce.
Редактирование:
Если вы хотите сделать это "по-woocommerce", вам понадобится функция wc_get_template_part()
— ранее, до версии WC 2.1, использовалась функция woocommerce_get_template_part()
, теперь устаревшая. Я уже давал ответ о том, как использовать последнюю, и вы можете применить его к новой функции — функционал остался тем же. В вашем случае, вероятно, стоит использовать соответствующий хук wc_get_template_part
. С этой информацией вы сможете сделать всё "по-woocommerce".

Спасибо за совет. Я все еще в поисках решения, которое больше подходит для WooCommerce, но этот вариант сработает. Еще раз спасибо @ialocin

Как сказал @RobertWilkins: »Этот код сработал идеально для меня и избавил от нескольких часов головной боли... Огромное спасибо!!!«
