メタデータで開始日と終了日を設定できるカスタム投稿タイプがあります。
以下の関数を使用して検索結果をフィルタリングし、投稿タイプvisitor
からの結果のみを表示します。
function SearchFilter($query) {
if ($query->is_search) {
$query->set('post_type', 'visitor');
}
return $query;
}
add_filter('pre_get_posts', 'SearchFilter');
開始日と終了日を含む2つのメタデータフィールドがあります。
get_post_meta( get_the_ID(), 'visitor-start-date', true ); // Start date
get_post_meta( get_the_ID(), 'visitor-date', true ); // End date
現在の日付(今日)がこれら2つの日付の間にある場合にのみ検索結果を表示するように検索結果をフィルタリングします。日付はEpoch/unix
であり、次のようになります。1539129600
1546214400
今日の日付が開始日と終了日の間にある場合にのみ結果を表示するために、これを上記で作成したフィルタに含めるにはどうすればよいですか。
ニーズに応じて投稿をフィルタリングするためにメタクエリを使用することができます。
これがサンプルコードです。
function SearchFilter( $query ) {
if ( !is_admin() && $query->is_search ) {
$query->set( 'post_type', 'visitor' );
$query->set( 'meta_query', array(
'relation' => 'AND',
array(
'key' => 'visitor-start-date',
'value' => time(),
'compare' => '<='
),
array(
'key' => 'visitor-date',
'value' => time(),
'compare' => '>='
),
) );
}
}
add_action( 'pre_get_posts', 'SearchFilter' ); // pre_get_posts is an action, not a filter, so you don't have to return anything in it
サーバー時間が必要な場合は、上記のコードのようにtime
関数を使用してください。
一方、比較にWP timeを使用する必要がある場合は、current_time
関数を使用します。
current_time( 'timestamp' );