Wordpress - Показывать только страницы с указанным шаблоном c в результатах поиска - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу отображать в результатах поиска WP ТОЛЬКО страницы с указанным шаблоном c, потому что я пытаюсь создать каталог продуктов без каких-либо плагинов. Чистый код WP. Некоторые страницы являются моими продуктами, и у них есть product. php файл шаблона. Это мой поиск. php:

<?php
    if ( have_posts() ) :
        while ( have_posts() ) :
            the_post();
            get_template_part( 'template-parts/post/content', 'excerpt' );
        endwhile;
        the_posts_pagination();
    else :
        ?>
        <p><?php _e( 'No results.' ); ?></p>
        <?php
            get_search_form();
    endif;
?>

И вопрос в том, как отобразить только мои страницы продукта без каких-либо других страниц?

1 Ответ

0 голосов
/ 17 февраля 2020

Попробуйте! Эта функция прервет поисковый запрос и добавит некоторое условие для запроса, возвращающее указанные c страницы.

//Filter the search for only posts and parts
function SearchFilter($query)
{
    // Now filter the posts
    if ($query->is_main_query() & $query->is_search && $search_template) {
        $query->set('post_type', 'page');
        $query->set('meta_key' => '_wp_page_template',);
        $query->set('meta_value' => 'product.php');
    }
   // Returning the query after it has been modified
    return $query;
}

add_action('pre_get_posts', 'SearchFilter');

Объяснение кода:

«Post_type» ограничит этот фильтр только типом поста.
Условие Этот фильтр будет ограничивать работу только по поисковым запросам, а не при каждом вызове запроса к сообщениям.

 $query->is_search && $search_template


Эти параметры будут фильтровать возвращаемые сообщения по мета-ключу "_wp_page_template "который содержит шаблон страницы, поэтому мы возвращаем только страницы с шаблоном страницы" product. php ".

        $query->set('meta_key' => '_wp_page_template',);
        $query->set('meta_value' => 'product.php');
...