web-dev-qa-db-ja.com

現在の日付が2つの日付の間にある場合にのみ検索結果を表示しますか。

メタデータで開始日と終了日を設定できるカスタム投稿タイプがあります。

以下の関数を使用して検索結果をフィルタリングし、投稿タイプ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であり、次のようになります。15391296001546214400

今日の日付が開始日と終了日の間にある場合にのみ結果を表示するために、これを上記で作成したフィルタに含めるにはどうすればよいですか。

1
joq3

ニーズに応じて投稿をフィルタリングするためにメタクエリを使用することができます。

これがサンプルコードです。

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' );
1