メタ値をすべて取得して配列に入れる

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

イベントのランダムな開催日をAdvanced Custom Fields Pro のリピーターで設定して、カレンダーで表示するためには、カレンダーの日付と照合するためのデータが必要なので、これはリピーターの日付を別のフィールドに関数で保存して、テーマ上で配列に入れる、ということをしているのだが、アーカイブで全てのイベントの開催日をカレンダーで表示しようとすると、全てのイベントの開催日データが必要になる。

フィールド名と投稿タイプを指定してすべてのフィールド値を取得するためのテーマ関数

function get_meta_values( $meta_key = '', $post_type = 'post', $post_status = 'publish' ) {
    global $wpdb;
    if( empty( $meta_key ) )
        return;
    
    $meta_values = $wpdb->get_col( $wpdb->prepare( "
        SELECT pm.meta_value FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
        WHERE pm.meta_key = %s 
        AND p.post_type = %s 
        AND p.post_status = %s 
    ", $meta_key, $post_type, $post_status ) );
    
    return $meta_values;
}

テーマ側でデータを取得・配列に入れる・重複を削除・データが日付のため昇順にソート
ソートする理由は、「今日」を超える開催日を取得するため

$data1 = get_meta_values( 'data', 'posttype' );
$data2 = implode(',',$data1);
$data3 = explode (',', $data2);
$data = array_unique($data3);
usort($data, function ($a, $b) {
    return strtotime($a) - strtotime($b);
});

その他のAdvanced Custom Fields に関する記事一覧

Advanced Custom Fields に関する記事一覧ページへ