Palych_tw
@Palych_tw
Типа веб-разработчик

Как исключить шаблон кастомной таксономии из запроса woocommerce?

Есть пользовательская таксономия, к ней, помимо встроенных постов, привязаны еще продукты. И поэтому woocommerce считает, что для архивной страницы этой таксономии нужно подтягивать свой запрос WC_Query и свой шаблон woocommerce.php с woocommerce_contnet();. Условие на использование шаблона я написал
if (is_tax('authors')) {
    include('taxonomy-authors.php');
}
else
{	woocommerce_content();  }

Это неполный код, но суть такая. Но запрос остается вукоммерсовский, и выводит продукты, как бы я его внутри шаблона не сбрасывал. Можно дописать отдельный get_posts() или WP_Query на посты, но в основном лупе все равно продукты и из-за этого проблемы с пагинацией. Мне нужна пагинация по постам, а если нет второй страницы с продуктами, то и вторую страницу с постами он не покажет, будет 404.
UPD: нашел в файле class-wc-query.php строчку проверки на принадлежность страницы к продуктам или архивам для pre_get_posts
// Only apply to product categories, the product post archive, the shop page, product tags, and product attribute taxonomies
		} elseif ( ! $q->is_post_type_archive( 'product' ) && ! $q->is_tax( get_object_taxonomies( 'product' ) ) ) {

Еслия добавлю в неё условие, все будет работать как мне надо
// Only apply to product categories, the product post archive, the shop page, product tags, and product attribute taxonomies
		} elseif ( (! $q->is_post_type_archive( 'product' ) && ! $q->is_tax( get_object_taxonomies( 'product' ) )) || $q->is_tax('authors') ) {

Как это сделать хуком или фильтром или экшном, чтоб не менять код плагина?
  • Вопрос задан
  • 237 просмотров
Решения вопроса 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Хук pre_get_posts, а уже в нем проверка - если таксономия, то указать $query->set( 'post_type', 'post' ), если вукоммерс - $query->set( 'post_type', 'product' ). Тогда основной запрос будет возвращать только посты нужного типа и с пагинацией все будет ок.
Ответ написан
Palych_tw
@Palych_tw Автор вопроса
Типа веб-разработчик
хук получился такой
add_action('pre_get_posts','mandrivets_authors');

function mandrivets_authors($query){
        if( $query->is_tax('authors') && $query->is_main_query() && ! $query->is_admin()) {
            $query->set('wc_query', '');
            $query->set('post_type', 'post');
            $query->set('meta_query', '');
        }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы