2016-12-12 2 views
0

Я использую Дива WP тему и у меня есть следующий код в моем заголовке:Показать WooCommerce продукты в get_search_query()

<form role="search" method="get" class="et-search-form" action="<?php echo esc_url(home_url('/')); ?>"> 

       <?php 

        printf('<input type="search" class="et-search-field" placeholder="%1$s" value="%2$s" name="s" title="%3$s" />', 

         esc_attr__('Search &hellip;', 'Divi'), 

         get_search_query(), 

         esc_attr__('Search for:', 'Divi') 

        ); 

       ?> 

       </form> 

Мне нужно отобразить продукты WooCoomerce в результатах поиска, а также страницы и сообщения ,

Я попытался добавить:

   <input type="hidden" value="product" name="post_type" id="post_type" /> 

Но при этом он теперь только показывает продукты WooCommerce и больше не показывает страниц/сообщения.

Благодаря

ответ

2

Вы нужно использовать pre_get_posts фильтр

function search_filter($query) { 
    if (!is_admin() && $query->is_main_query()) { 
     if ($query->is_search) { 

      $query->set('post_type', array('post', 'product')); 

      $meta_query = array(
       'relation' => 'AND', 
       array(
        'key' => '_visibility', 
        'value' => 'visible', 
        'compare' => 'IN' 
       ), 
       array(
        'key' => '_stock_status', 
        'value' => 'instock', 
        'compare' => '=' 
       ) 
      ); 

      $query->set('meta_query', $meta_query); 
     } 
    } 
} 

add_action('pre_get_posts','search_filter'); 

Добавить это в functions.php ребенка-теме, конечно, вы можете удалить или добавить любой тип записи в массиве определения post_type (страница, купон). Чтобы получить только доступные продукты, нам необходимо установить специальный meta_query в соответствии с пользовательскими полями Woocommerce.

Надеюсь, что это поможет!

+0

С помощью functions.php вы имеете в виду файл functions.php ** темы **. Кроме того, хотя я знаю, что этот ответ верен, вы должны объяснить, что это делает и почему его следует использовать. Кроме того, ваш 'post_type' должен, вероятно, * также включать *' страницу' по умолчанию, не так ли? –

+0

@cale_b: Я добавил некоторые детали, как вы предлагаете. Обычно я не устанавливаю страницы для поиска на сайте, основанном на электронной коммерции. Меню и ссылки для страниц обычно достаточны и не очень интересны для поиска? – Benoti

+0

@Benoti благодарю вас за это, но не повезло, я боюсь. Добавление кода в мой файл функций в дочерней теме изменяет результаты поиска только на показ продуктов woocommerce и больше не показывает сообщений/страниц. – sc2015

Смежные вопросы