Elementor: Исключить категории продуктов при использовании «Источник: Текущий запрос»

Вопрос или проблема

Я хочу создать шаблон Архива продуктов в Elementor с виджетом Продукты или виджетом Сеточная петля, установленным на Источник: Текущий запрос. Затем я хочу настроить параметры “Исключить”, чтобы исключить по определенному термину продукта/категории продукта. Однако, когда я настраиваю шаблон Архива продуктов таким образом, опция исключения не фильтрует указанный термин/категорию продукта из текущего запроса.

Я узнал от поддержки Elementor, что опции “Исключить” не работают, когда в качестве источника выбран “Текущий запрос”.

Поэтому я ищу решение, которое позволяет использовать “Текущий запрос” в качестве источника, но всегда отфильтровывать все с определенной категорией продукта.

Например, на моем сайте много категорий продуктов. Каждая категория продуктов использует один шаблон Архива продуктов с виджетом Продукты, установленным на “Источник: Текущий запрос”. Это правильно отображает все продукты в каждой категории продуктов. Однако у меня есть категория продуктов “Продано”, и я хочу, чтобы запрос всегда фильтровал эту категорию “Продано”, при этом всегда имея источник, установленный на “Текущий запрос”.

Пожалуйста, дайте мне знать, если у вас есть какие-либо решения для достижения этого, будь то через пользовательский запрос на Сеточной петле или что-то еще.

Спасибо!

Ответ или решение

Ваша задача – создать шаблон архива продуктов в Elementor с использованием виджета Products или Loop Grid, настроенного на источник: Current Query. Главное требование заключается в том, чтобы исключить определённую категорию продуктов, например "Sold", при этом сохраняя источник как Current Query.

Теория

Когда вы используете "Источник: Current Query" в Elementor, он берёт информацию непосредственно из текущего контекста, например, категории продукта, попадающей под эту логику. Однако, функция "Исключить" в Elementor не работает при выборе текущего запроса как источника. Это связано с тем, что функционал "Current Query" возвращает полный список данных, соответствующих установленным условиям запроса, не учитывая дополнительные фильтры или исключения, которые могут быть заданы через интерфейс.

Пример

Предположим, у вас есть веб-сайт, который продаёт товары по различным категориям, например, "Одежда", "Обувь" и "Продано" (Sold). Для каждой из этих категорий используется единый шаблон архива продуктов, который показывает все товары внутри данной категории. Но у вас есть требование скрыть категорию "Продано" вне зависимости от текущего запроса, что технически невозможно через стандартные настройки Elementor с "Current Query".

Применение

Чтобы реализовать запрос с фильтрацией исключённой категории "Продано", вам необходимо использовать пользовательский код. Один из методов — воспользоваться хуками WordPress для фильтрации текущего запроса. Вот основной шаг, как это можно реализовать:

  1. Добавьте пользовательский код в functions.php вашей темы: Используйте фильтр pre_get_posts, чтобы модифицировать WP_Query и исключить категорию "Sold" из результатов запроса.
function exclude_sold_products_from_query( $query ) {
    if ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'product' ) ) {
        $tax_query = (array) $query->get('tax_query');

        $tax_query[] = array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array('sold'),
            'operator' => 'NOT IN'
        );

        $query->set('tax_query', $tax_query);
    }
}
add_action('pre_get_posts', 'exclude_sold_products_from_query');
  1. Эффективность: Этот код проверяет, что вы находитесь на главной странице архива продуктов и добавляет условие в запрос WP Query, исключающее категорию с ярлыком "sold".

Таким образом, каждый раз, когда вы будете использовать Current Query в Elementor, вы автоматически исключите товары из заданной категории "Sold". Этот подход обеспечит вам необходимую гибкость, сохраняя актуальность и надежность функционала на вашем сайте.

Оцените материал
Добавить комментарий

Капча загружается...