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にはチェックボックス、ラジオボタン、プルダウン(セレクトボックス)と選択する機能があります。 そして実は初期に選択状態にする方法があるのですが、...