2017-12-01 12 views
0

私はthisによるWP_Queryを使用して高度なワードプレス検索を構築したいと考えています。WP_Queryでワードプレス検索の日付クエリ

私はショートコードを使用してフォーム検索を作成します。

function sm_pre_get_posts($query) { 
    // check if the user is requesting an admin page 
    // or current query is not the main query 
    if (is_admin() || ! $query->is_main_query()){ 
     return; 
    } 
    // edit the query only when post type is 'accommodation' 
    // if it isn't, return 
    if (!is_post_type_archive('post')){ 
     return; 
    } 
    $date_query = array(); 
    // get query var values 
    // defaults to empty string 
    if(!empty(get_query_var('cat'))){ 
     $query->set('cat', get_query_var('cat')); 
    } 


    // get date query var values 

    $date_query[] = array('after' => get_query_var('timestart') ,'inclusive'=>'true'); 
    $date_query[] = array('before' => get_query_var('timeend'),'inclusive'=>'true'); 

    $date_query['relation'] = 'AND'; 

     $query->set('date_query', $date_query); 
} 
add_action('pre_get_posts', 'sm_pre_get_posts', 1); 

そして最後には

function sm_search_form($args){ 
    // The Query 
    // meta_query expects nested arrays, even if you only have one query 
    // to add the category param 
    $sm_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => '-1')); 
    // The Loop 
    $args = array(
     'orderby' => 'name', 
     'order' => 'ASC', 
     'parent' => 0 
    ); 
    $categories = get_categories($args); 
    /* Restore original Post Data */ 
    wp_reset_postdata(); 
    if(count($categories) == 0){ 
     return; 
    } 
    asort($categories); 


    $cat_option = '<select name="cat">'; 
    $cat_option .= '<option value="">' . __('choose category','my_plugin') . '</option>'; 
    foreach ($categories as $category) { 
     $cat_option .= '<option value="' . $category->cat_ID . '">' . $category->cat_name . '</option>'; 
    } 
    $cat_option .= '</select>' . "\n"; 
    reset($categories); 




    $output = '<form id="smform" action="' . esc_url(home_url()) . '" method="GET" role="search">'; 
    $output .= '<div class="smtextfield">' . '<input type="text" name="s" placeholder="Search key..." value="' . get_search_query() . '" /></div>'; 
    $output .= '<div class="smtextfield">' . '<input type="text" name="timestart" placeholder="timestart..."/></div>'; 
    $output .= '<div class="smtextfield">' . '<input type="text" name="timeend" placeholder="timeend..." /></div>'; 
    $output .= '<div class="smselectbox">' . $cat_option . '</div>'; 
    $output .= '<input type="hidden" name="post_type" value="post" />'; 
    $output .= '<p><input type="submit" value="Go!" class="button" /></p></form>'; 
    return $output; 
} 

検索フォームに私の問題がある:

function sm_setup() { 
    add_shortcode('sm_search_form', 'sm_search_form'); 
}add_action('init','sm_setup'); 

からログインカスタムクエリは、私はいくつかの条件に基づいて、カスタムクエリを作成し

function sm_register_query_vars($vars) { 
    $vars[] = 'cat'; 
    $vars[] = 'timestart'; 
    $vars[] = 'timeend'; 
    return $vars; 
} 
add_filter('query_vars', 'sm_register_query_vars'); 

をvarsのdate_query!私は日付でカスタマイズしたいとき。検索がうまくいかない!すべての投稿を表示します。

どこでミスをしましたか?

答えて

0

ここで、date_queryの使用は間違っています: 'inclusive'は内部配列の外側にある必要があります。比較列がデフォルトの場合、前と後は同じ配列になります。

$date_query[] = array( 
    'after' => get_query_var('timestart'), 
    'before' => get_query_var('timeend') 
    ); 

    $date_query['relation'] = 'AND'; 
    $date_query['inclusive'] = true; 

get_query_varの値が正しいことを確認してください。ここでの構文を確認してください:https://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

f.e.クエリの前にそれらを印刷します。エコーget_query_var( 'timestart'); - 正しく表示されているかどうかを確認してください。

+0

値はこの構文で送信されます。YYYY-mm-dd。例えば2017-08-01 –

+0

の場合、私のコードはあなたのために働くはずです。それは働く&テストされたコードです。それが動作しない場合は、あなたの質問にあなたの最終的なvar_dump($ args)を追加し、何かが間違っているかどうかを確認します –

+0

私はvar_dumpを置く? –