BLOG

ブログ
  • Web制作

ACFのデイトピッカーで指定した日付が今日から3ヶ月以内の記事のみを抽出し、タイトルをMW WP Formのセレクトに自動で挿入する方法

ACFのデイトピッカーで指定した日付が今日から3ヶ月以内の記事のみを抽出し、タイトルをMW WP Formのセレクトに自動で挿入する方法

WordPressでカスタムフィールドを扱う際に便利なプラグイン「Advanced Custom Fields(ACF)」と、フォーム作成に役立つ「MW WP Form」を組み合わせて、特定の条件を満たす記事タイトルをフォームのセレクトボックスに自動で追加する方法を解説します。

実現する機能

  1. ACFのデイトピッカーフィールドで指定された日付が今日から3ヶ月以内の記事を抽出する。
  2. 抽出した記事のタイトルをMW WP Formのセレクトボックスに動的に挿入する。

手順

1. ACFのデイトピッカーフィールドを作成

まず、対象の投稿タイプにACFのデイトピッカーフィールドを追加します。

  1. WordPress管理画面の「カスタムフィールド」→「フィールドグループを追加」を開く。
  2. フィールドタイプを「デイトピッカー」に設定。
  3. フィールド名を event_date など任意のものにする。
  4. 設定を保存。

2. MW WP Formのフォームを作成

MW WP Formでフォームを作成し、セレクトボックスを設置します。

  1. 「MW WP Form」→「新規追加」でフォームを作成。
  2. 以下のように [mwform_select name="event_title"] を追加。
[mwform_select name="event_title"]

このままでは静的なセレクトボックスなので、動的に記事タイトルを挿入するための処理を行います。

3. 記事を取得してセレクトボックスに挿入するカスタムコード

functions.php に以下のコードを追加します。

<?php
function form_event_cat_list($children, $atts)
{
    if ($atts['name'] == 'event_title') {
        $today = date_i18n('Y-m-d'); //今日の日付
        $threemonthslater = date_i18n("Y-m-d", strtotime("+90 day", current_time('timestamp'))); //3ヶ月後の日付

        $events = get_posts(array(
            'post_type' => 'event', //投稿タイプ
            'posts_per_page' => -1, //全件表示
            'meta_key' => 'event_date', //イベント開催日
            'orderby' => 'meta_value',
            'order' => 'ASC', //昇順
            'type' => 'DATE', //日付
            'meta_query' => array(
                'relation' => 'AND',
                array(
                    'key' => 'event_date', // イベント開催日
                    'value' => $today, // 今日
                    'compare' => '>=', // 今日以降
                    'type' => 'DATE' //日付の比較
                ),
                array(
                    'key' => 'event_date', // イベント開催日
                    'value' => $threemonthslater, // 3ヶ月後
                    'compare' => '<=', // 3ヶ月後の日付よりも前
                ),
            ),
        ));

        /* 取得した配列からタイトルだけを抽出 */
        foreach ($events as $event) {
            $children[$event->post_title] = $event->post_title;
        }
    }
    return $children;
}
add_filter('mwform_choices_mw-wp-form-XXX', 'form_event_cat_list', 10, 2);

XXX はMW WP FormのフォームIDに置き換えてください。

4. 動作確認

  1. ACFで記事ごとに日付を設定。
  2. MW WP Formのフォームページを開く。
  3. 今日から3ヶ月以内の日付が設定された記事のみがセレクトボックスに表示されるか確認。

まとめ

この方法を使うことで、イベント記事の管理がしやすくなり、フォームで簡単に選択できるようになります。