0

Advanced Custom FieldsプラグインのDate and Time Pickerアドオンを使用して作成されたメタキーでカスタム投稿タイプをソートしようとしている次の問題に対処しています。アドオンは、ユーザーがダッシュボードで時間を設定するための jQuery 日付ピッカーを作成します。デフォルトでは、オプションsave_as_timestampが true に設定されているため、バックエンドのデータは Unix タイムスタンプ/エポック タイムとして設定されます。

一連のイベント (すべて 1 日に発生) を時間順に並べ替えようとしています。私が抱えている問題は、すべてのイベントが 1 日に追加された場合、それらが正しく並べ替えられることです (たとえば、午前 9 時のイベントが最初に来て、午後 5 時が最後になります)。ただし、1 日か 2 日後に上司が新しいイベントをリストに追加すると、日付が異なるため、最終イベント (午前 9 時のイベントの場合) として表示されます。私の投稿タイプのクエリは次のとおりです。

<?php $args = array(
    'post_type' => 'event',
    'posts_per_page' => -1,
    'nopaging' => true,
    'post_status' => 'publish',
    'meta_key' => 'start_time',
    'orderby' => 'meta_value_num',
    'order' => 'ASC'
);
$my_query = new WP_Query( $args );
while( $my_query->have_posts() ) : $my_query->the_post(); ?>

私の推定では、2 つのオプションがあります。save_as_timestampオプションを false に変更して、日付が時刻に関連付けられないようにします。問題は、すべてのイベントで時間を再度設定する必要があることです。それでも、AM 時間の後に PM 時間をソートできる meta_query を管理する必要があります。午後 5 時の後の午前 9 時。meta_queryを使用してtype を 'TIME' に設定して遊んだことがありますが、まだ運がありません。

2番目のオプションは、PHPで日付、時刻、またはDateTime関数の組み合わせを使用して日付を取り除く方法でタイムスタンプをフォーマットできると思いますが、これを正しく行う方法について途方に暮れています. クエリに次を追加しようとしましたが、meta_query の経験はまったくありません。

'meta_query' => array(
    array(
        'key' => 'start_time',
        'value' => date('Hi', time()),
        'compare' => '>='
    )
)

これを行う方法はありますか、またはループが始まる前にフォーマットされた変数としてアクセスできるように、meta_key をフォーマットする関数または pre_get_posts フィルターを使用する必要がありますか? どんな助けでも大歓迎です!

4

1 に答える 1