Snow Monkey Formsのセレクトボックスの初期値をACFの値にする方法

Snow Monkey FormとACF

WordPressでカスタムフィールドを活用する際に定番なのが、Advanced Custom Fields(ACF)です。
本記事では、「ACFで登録した値を、Snow Monkey Formsのセレクトボックスに初期選択値として連携する方法」を、実装例付きで解説します。

「投稿ページから問い合わせフォームへ値を引き継ぎたい」といったケースにも対応可能です。

目次

本記事で解決できること

•   「ACFの値」を「セレクトボックスの初期値として設定」する方法
•   「投稿IDをURLパラメータ経由でフォームに渡す」方法
•   Snow Monkey Formsのフックを用いた実装手順

使用環境

•   WordPress
•   Advanced Custom Fields(無料 or Pro どちらでもOK)
•   Snow Monkey Forms
•   テーマはfunctions.phpやsingle.phpなど、PHPを設定できるもの(プラグインの使用可)

実現したいこと

たとえば、以下のようなケースを想定します:

1. 投稿ID 14 のカスタムフィールド(例:select-shop-name)に「テスト店舗」という値が登録されている

2. /contact-recruit/?post_id=14 にアクセスすると、フォームのセレクトボックス(name=”select-shop-name”)で「テスト店舗」が自動選択されている状態にする

❶ ACFの設定

まず、カスタムフィールド select-shop-name を ACFで作成します。

  • フィールドタイプ:選択(Select)
  • フィールド名:select-shop-name
  • 選択肢:値とラベルを分けて設定(下を参考)
  • 戻り値の形式:値(value) ← 自動選択に使うため 推奨

ポイントは、「フィールド名」と「選択肢の値」を
「半角英数字の小文字」「記号は-(ハイフン)or _(アンダーバー)」を使用することです。

選択肢は、以下をコピペしてから修正していただくとやりやすいと思います。

shop01 : テスト店舗
shop02 : テストベーカリ

❷ Snow Monkey Forms側の設定

フォームにセレクトボックスを設置します。
「name 属性」と「options 属性の項目」は ACFのフィールド名と一致させてください。

options 属性の項目はvalueとlabelをそれぞれ"で囲む必要があります。
options 属性の項目は、以下をコピペしてから修正していただくとやりやすいと思います。

"" : "選択してください"
"shop01" : "テスト店舗"
"shop02" : "テストベーカリー"

❸ functions.phpにコードを追加

以下のコードを functions.php に追加してください

/*
 * ACFの選択フィールドの値を取得して、Snow Monkey Formsのセレクトボックスの初期値を設定
 * URLがhttp://example.com/contact/?post_id=14のような形式の場合に対応
 */
add_filter(
	'snow_monkey_forms/control/attributes',
	function ($attributes) {
		// ACFの値が取得できた場合、セレクトボックス(name:select-shop-name)の初期値を設定
		if (isset($attributes['name']) && 'select-shop-name' === $attributes['name']) {

			// URLクエリからpost_idを取得(例:http://example.com/page?post_id=14)
			$post_id = isset($_GET['post_id']) ? absint($_GET['post_id']) : null;

			// post_id が取得できた場合、ACFの値を取得
			if ($post_id) {
				$acf_value = get_field('select-shop-name', $post_id);

				// セレクトボックスの初期値を設定
				if ($acf_value) {
					$attributes['value'] = $acf_value;
				}
			}
		}
		return $attributes;
	},
	10,
	2
);

コード解説

•   snow_monkey_forms/control/attributes は各フォームフィールドの属性を変更できるフック
•   value を直接変更することで、セレクトボックスの初期選択状態を制御できます
•   $_GET['post_id'] を通じて対象投稿のACF値を取得しています

❹ single.phpにフォームへのリンクを設置

single.php に以下のコードを追加して、現在の投稿からフォームへリンクを生成します

<?php
		$post_id = get_the_ID(); // 現在の投稿のIDを取得
		$link_url = home_url('/contact-recruit/?post_id=' . $post_id);
?>

<p class="c-button-icon-text-arrow c-inner">
	<a href="<?php echo esc_url($link_url); ?>">
		この投稿の情報を元に応募する
	</a>
</p>

❺ 動作確認

[準備] 投稿ID(今回は「14」)の ACFの値を設定(今回は「テスト店舗」)

1. /contact-recruit/?post_id=14 にアクセス

2. Snow Monkey Forms のセレクトボックスで「テスト店舗」が自動選択されていることを確認

よくあるミスと解決方法

Q. ACFの値が選択されない場合は?

•   ACFの「戻り値の形式」が「値(value)」になっているか確認
•   get_field()で取得される値が <option value="xxx"> の値と完全一致しているか確認
•   値(value)は、「半角英数字」かつ「小文字」か?(大文字だと厳密に値が一致しない場合があります。)
•   使う記号は「-(ハイフン)」か「_(アンダーバー)」以外は使っていないか?

参考サイト

WAZA │ WordPress・SWELL専門の技...
Snow Monkey Forms│初期選択状態を指定する方法│チェックボックス・ラジオボタン・プルダウン(セレクトボッ... Snow Monkey Formsにはチェックボックス、ラジオボタン、プルダウン(セレクトボックス)と選択する機能があります。 そして実は初期に選択状態にする方法があるのですが、...
Snow Monkey FormとACF

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
目次