Вопрос или проблема
Я хочу создать шаблон Архива продуктов в Elementor с виджетом Продукты или виджетом Сеточная петля, установленным на Источник: Текущий запрос. Затем я хочу настроить параметры “Исключить”, чтобы исключить по определенному термину продукта/категории продукта. Однако, когда я настраиваю шаблон Архива продуктов таким образом, опция исключения не фильтрует указанный термин/категорию продукта из текущего запроса.
Я узнал от поддержки Elementor, что опции “Исключить” не работают, когда в качестве источника выбран “Текущий запрос”.
Поэтому я ищу решение, которое позволяет использовать “Текущий запрос” в качестве источника, но всегда отфильтровывать все с определенной категорией продукта.
Например, на моем сайте много категорий продуктов. Каждая категория продуктов использует один шаблон Архива продуктов с виджетом Продукты, установленным на “Источник: Текущий запрос”. Это правильно отображает все продукты в каждой категории продуктов. Однако у меня есть категория продуктов “Продано”, и я хочу, чтобы запрос всегда фильтровал эту категорию “Продано”, при этом всегда имея источник, установленный на “Текущий запрос”.
Пожалуйста, дайте мне знать, если у вас есть какие-либо решения для достижения этого, будь то через пользовательский запрос на Сеточной петле или что-то еще.
Спасибо!
Ответ или решение
Ваша задача – создать шаблон архива продуктов в Elementor с использованием виджета Products или Loop Grid, настроенного на источник: Current Query. Главное требование заключается в том, чтобы исключить определённую категорию продуктов, например "Sold", при этом сохраняя источник как Current Query.
Теория
Когда вы используете "Источник: Current Query" в Elementor, он берёт информацию непосредственно из текущего контекста, например, категории продукта, попадающей под эту логику. Однако, функция "Исключить" в Elementor не работает при выборе текущего запроса как источника. Это связано с тем, что функционал "Current Query" возвращает полный список данных, соответствующих установленным условиям запроса, не учитывая дополнительные фильтры или исключения, которые могут быть заданы через интерфейс.
Пример
Предположим, у вас есть веб-сайт, который продаёт товары по различным категориям, например, "Одежда", "Обувь" и "Продано" (Sold). Для каждой из этих категорий используется единый шаблон архива продуктов, который показывает все товары внутри данной категории. Но у вас есть требование скрыть категорию "Продано" вне зависимости от текущего запроса, что технически невозможно через стандартные настройки Elementor с "Current Query".
Применение
Чтобы реализовать запрос с фильтрацией исключённой категории "Продано", вам необходимо использовать пользовательский код. Один из методов — воспользоваться хуками WordPress для фильтрации текущего запроса. Вот основной шаг, как это можно реализовать:
- Добавьте пользовательский код в 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');
- Эффективность: Этот код проверяет, что вы находитесь на главной странице архива продуктов и добавляет условие в запрос WP Query, исключающее категорию с ярлыком "sold".
Таким образом, каждый раз, когда вы будете использовать Current Query в Elementor, вы автоматически исключите товары из заданной категории "Sold". Этот подход обеспечит вам необходимую гибкость, сохраняя актуальность и надежность функционала на вашем сайте.