Шаблон пользовательского поиска для пользовательских типов записей

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

Я знаю, что этот вопрос задаётся миллион раз, и я нашёл решение. Оно кажется довольно простым, но по какой-то причине не работает. Интересно, связано ли это с тем, что я выполняю поиск с помощью этого плагина: https://wordpress.org/plugins/search-filter/, но у меня есть сомнения. Я надеялся, что кто-то сможет пролить свет на это, возможно, я что-то упускаю. Для справки, вот мой код:

function template_chooser($template)
{
   global $wp_query;
   $post_type = get_query_var('post_type');
   if( $wp_query->is_search && $post_type == 'product' )
{
  return locate_template('archive-products.php');
} else {
   $args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );
   query_posts( $args ); 
}
 return $template;
}
    add_filter('template_include', 'template_chooser');

Я использую это с WooCommerce, плагин поиска и фильтрации предназначен для выбора продуктов по категории, атрибуту и по имени. Поиск работает, но он не загружает пользовательский шаблон. Я пытаюсь создать страницу результатов, чтобы отображать продукты так же, как они отображаются на странице категории WooCommerce. По какой-то причине, если вы выполняете поиск, не выбрав ничего, используется стандартный шаблон результатов, который используется для постов, страниц и т.д., а не шаблон продукта WooCommerce. Если вы выбираете категорию или атрибут, то он отображает шаблон продукта WooCommerce, как и должно быть.

Любая помощь будет очень ценна. Спасибо.

Попробуйте также добавить возврат в else{}, вот так:

function template_chooser($template)
{
   global $wp_query;
   $post_type = get_query_var('post_type');
   if( $wp_query->is_search && $post_type == 'product' )
{
   return locate_template('archive-products.php');
} else {
   $args = array_merge( $wp_query->query, array( 'post_type' => 'post' ) );
   query_posts( $args ); 
   return locate_template('archive-products.php');
}
 return $template;
}
    add_filter('template_include', 'template_chooser');

Не тестировал.

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

Чтобы создать отдельный шаблон поиска для пользовательских типов записей, таких как продукты WooCommerce, и решить вашу проблему с использованием плагина "Search & Filter", вам следует внести некоторые изменения в ваш код. Основная причина, по которой ваш текущий код не работает, может заключаться в том, что вы не возвращаете соответствующий шаблон в блоке else, а также в том, что ваша логика может не совсем правильно обрабатывать запросы.

Вот окончательное решение вашей проблемы:

function template_chooser($template) {
    global $wp_query;

    // Проверяем, что это поисковой запрос
    if ($wp_query->is_search) {
        // Получаем тип поста из запроса
        $post_type = get_query_var('post_type');

        // Если тип поста 'product', возвращаем пользовательский шаблон
        if ($post_type == 'product') {
            return locate_template('archive-products.php');
        } else {
            // Если тип поста не 'product', можем использовать стандартный шаблон
            // Для других типов записей, можно также вернуть шаблон для постов, если хотите
            return locate_template('archive.php'); // или используйте нужный шаблон
        }
    }

    return $template; // Возвращаем оригинальный шаблон, если не поисковый запрос
}
add_filter('template_include', 'template_chooser');

Объяснение:

  1. Проверка на поисковый запрос: Используется переменная $wp_query->is_search для проверки, является ли текущий запрос поисковым.

  2. Получение типа поста: Используем get_query_var('post_type') для получения типа поста в запросе. Это позволяет определить, является ли Запрос запросом на продукт или другим типом записи.

  3. Возврат шаблона: Если тип поста — product, мы возвращаем archive-products.php. Если это другой тип (например, стандартные посты), вы можете вернуть другой шаблон, такой как archive.php.

  4. Логическое завершение: Возвращает оригинальный шаблон, если запрос не является поисковым.

Таким образом, вы обеспечите, что шаблон для продуктов будет загружаться только тогда, когда вы ищете продукты, и привычное поведение будет поддерживаться для других типов постов.

Дополнительно, если у вас возникают проблемы с плагином "Search & Filter", убедитесь, что он корректно обрабатывает параметры запроса и перенаправляет их на соответствующие типы постов. Вы также можете обратиться к документации плагина для получения помощи, если возникнут специфические проблемы с его настройками. Надеюсь, это поможет вам решить вашу задачу.

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

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