私は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!私は日付でカスタマイズしたいとき。検索がうまくいかない!すべての投稿を表示します。
どこでミスをしましたか?
値はこの構文で送信されます。YYYY-mm-dd。例えば2017-08-01 –
の場合、私のコードはあなたのために働くはずです。それは働く&テストされたコードです。それが動作しない場合は、あなたの質問にあなたの最終的なvar_dump($ args)を追加し、何かが間違っているかどうかを確認します –
私はvar_dumpを置く? –