Snow Monkey Formsが便利でよく使っているのですが、テキスト用フィールドへ動的に初期値を設定できないかという課題があり、対応しました。
私の場合は以下のようなサイト案件でした。
- たくさんの施設を紹介するサイト
- 施設ごとに詳細ページがあり、各ページには必ずお問い合わせボタンがある。
- お問い合わせボタンを押すと、SnowMonkeyFormsのページに飛ぶ。
- 飛んだ先で、用意しておいた「問い合わせたい施設名」欄に、元ページの施設名(ページタイトル)が自動反映されるようにしたい。
ちなみに、ChatGPTのおかげで解決しています。Chat GPTまじすごい。
対応の概要
主に以下2つのステップがあります。
・functions.phpへのコード追加
・お問い合わせボタンの編集(私の上記の案件では、施設詳細ページのボタン)
①functions.phpへのコード追加
functions.phpに以下コードを追記します。
(子テーマを使っている場合は子テーマのfunctions.phpへ)
add_filter(
'snow_monkey_forms/control/attributes',
function( $attributes ) {
// name 属性値を持つブロックが対象
// name が fullname という名前のとき
if ( isset( $attributes['name'] ) && 'fullname' === $attributes['name'] ) {
// ?post_id という URL クエリがあるときが対象
$post_id = filter_input( INPUT_GET, 'post_id' );
if ( ! is_null( $post_id ) ) {
// ?post_id で指定された投稿のタイトルを初期値をして設定
$attributes['value'] = get_the_title( $post_id );
}
}
return $attributes;
}
);
fullnameというのは、SnowMonkeyFormsの設定画面でいう、赤枠のところです。
ここの「NAME属性」の「fullname」という名称が異なる場合は、上記の黄色のコードに反映させてください。
<参考ページ>
Snow Monkey Forms v1.2.0 をリリースしました
②お問い合わせボタンの編集(クエリパラメーター追加)
ここからはChatGPTに聞いて実装した内容です。(本当ありがたい)
①のコードでは、post_idというURLクエリを受け取ってその投稿ページのタイトルを表示するとなっており、ここ②では、post_idを渡せるように準備する、という内容になります。
まずは、実際に使ったコードの抜粋です。
<div>
<?php
$post_id = get_the_ID();
$url = add_query_arg( 'post_id', $post_id, '/contact/' );
echo '<a href="' . esc_url( $url ) . '">';
?>
<p>お問い合わせする</p>
</a>
</div>
イメージ)<a href=”/contact/?post_id=1111″><p>お問い合わせする</p></a>
https://…com/contact/というページへのリンクに、URLクエリ「post_id=1111」が付与されています。
これで「fullname」のフィールドの初期値として反映されるようになります。