2016-09-01 8 views
2

standartグローバル$ wp_queryを使用し、$ _GETのsおよびcategory_nameのようなパラメータを使用する検索ページがあります。wordpressの検索ページでwp_queryを設定するには

検索ページでwp_queryにいくつかのパラメータを追加したいとします。しかし、$ _GETで渡されたパラメータより複雑です。

私は

$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); 

のような新しいWP_Queryを作成し、

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

で結果を撮ってみました。しかし、それは動作しません理由です。

wp_reset_query() 

とグローバルの$ wp_queryをリセットする場合でも、私は内側に行くグローバルの$ wp_queryを書き換えると一致しない場合、私の日付とし、未設定のポストへのすべての投稿の日付を比較することができます。しかし、私は私が欲しいことをするのは正しい方法ではないと確信しています。

私は間違っていますか?

+0

そんなにありがとう@RohitKishore [この](https://www.smashingmagazine.com/2016/03/advanced-wordpress-search-with-wp_query/) –

+0

を見てみましょう。 正しい方法は、pre_get_postsフィルタを使用して、任意のquery_var throw set関数を設定することです。私の場合、例えば、$ query-> set( 'date_query'、array( '0' => array( 'after' => $ after、 'before' => $ before、 '包括的=>真 ) )); –

答えて

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); 
関連する問題