2016-09-01 3 views
2

У нас есть страница поиска, которая использует стандартную глобальную $ wp_query и принимает такие параметры, как s и category_name из $ _GET.Как установить wp_query на странице поиска в wordpress

Я хочу добавить некоторые параметры в wp_query на странице поиска. Но сложнее параметров, переданных в $ _GET.

Вот почему я попытался создать новый WP_Query как

$args = array(
'date_query' => array(
    array(
     'hour'  => 9, 
     'compare' => '>=', 
    ), 
    array(
     'hour'  => 17, 
     'compare' => '<=', 
    ), 
    array(
     'dayofweek' => array(2, 6), 
     'compare' => 'BETWEEN', 
    ), 
), 
'posts_per_page' => -1, 
); 

$new_query = new WP_Query($args); 

И принимать результаты в

<?php while ($new_query->have_posts()) : $new_query->the_post(); ?> 

Но это не работает. Даже если сбросить глобальные $ WP_Query с

wp_reset_query() 

Я могу переписать глобальные $ WP_Query происходит внутри и сравните дату каждого поста с моей датой и снята с должности, если не совпадает. Но я уверен, что это не правильный способ делать то, что я хочу.

Что я делаю неправильно?

+0

смотреть на [это] (https://www.smashingmagazine.com/2016/03/advanced-wordpress-search-with-wp_query/) –

+0

@RohitKishore спасибо так много. Правильный способ - использовать фильтр pre_get_posts и установить любую функцию набора запросов query_var. В моем случае, например, я написал $ query-> set ('date_query', array ('0' => array ( 'after' => $ after, 'before' => $ before, ' включительно '=> true ) )); –

ответ

0
function search_pre_get_posts($query) { 
    if(is_search()){ 
     if(empty($_GET['before'])){$before = '01.01.2050';}else{$before = $_GET['before'];} 
     if(empty($_GET['after'])){$after = '01.01.2000';}else{$after = $_GET['after'];} 

     $query->set('date_query', array(
      '0' => array(
       'after' => $after, 
       'before' => $before, 
       'inclusive' => true 
      ) 
     )); 
    } 
} 
add_action('pre_get_posts', 'search_pre_get_posts', 1); 
Смежные вопросы