wordpressには色んなメールフォームのプラグインがありますが、その中でも「MW WP Form」とプラグインが気に入っていてよく使っています。
日本人の方が製作者ということもありわかりやすく日本的なところがいいですね。
今回はそのMW WP Formのカスタマイズで、リンク元の投稿情報を引っ張ってきて表示させる方法を紹介します。
プラグイン公式サイトにも書いてるんですけどね。
MW WP Form – 柔軟なカスタマイズ性が魅力の WordPress 問い合わせフォームプラグイン MW WP Form 公式マニュアル
投稿IDをパラメーターに
投稿の情報を取得するにはURLに「post_id」というパラメーターを付与することで可能となります。
なので投稿の詳細ページからメールフォームへのリンクは以下のようなものにする必要があります。
<a href="https://securavita.net/contact/?post_id=100">問い合わせ</a> 動的の場合は <a href="<?php echo esc_url( home_url( '/contact/?post_id='.get_the_ID() ) ); ?>">問い合わせ</a>
プラグインの設定
プラグインの設定でこの「post_id」というパラメータから情報を取得する機能を有効にします。
サイドの下部にある部分「URL引数を有効にする」にチェックをいれます。
これで投稿の情報を取得できるようになります。
取得できる情報
取得できる情報は投稿の詳細ページで変数$postに入っているものになります。
例だとこんな感じ。
[ID] => 428 [post_author] => 1 [post_date] => 2019-02-14 15:29:53 [post_date_gmt] => 2019-02-14 06:29:53 [post_content] => テストの記事内容だよ。 [post_title] => ブログテスト [post_excerpt] => テストの抜粋だよ。 [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => blog-test [to_ping] => [pinged] => [post_modified] => 2019-02-14 15:30:06 [post_modified_gmt] => 2019-02-14 06:30:06 [post_content_filtered] => [post_parent] => 0 [guid] => https://securavita.net/?p=428 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw
このキーに当たる部分をフォームのショートコードに設定します。
ここでは投稿タイトルを取得します。
[mwform_text name="title" size="60" value="{post_title}"]
で、パラメータpost_id付きでフォームを設置しているページに行くと投稿タイトルがinputのvalue値に設定されています。
他、カスタムフィールドも取得可能で、post_titleの部分をキー名に変更してやればOK!
priceというカスタムフィールドを取得したい場合は
[mwform_text name="title" size="60" value="{price}"]
となります。
データを整形して取得する
上記の方法は簡単ですが、保持してあるデータがそのまま出力されます。
例えば日付を出したい場合はvalueに{post_date}とやればいいのですが、これだと2019-02-14 15:29:53と表示されます。
日付であれば2019年02月14日と表示させたいですよね。
他URLや配列で入っているカスタムフィールドなど、なにか処理を行わないといけない場合もあるかと思います。
そんな時のためにフィルターが用意してあります。
いやー気が利いてますね。
mwform_value_mw-wp-form-xxx
mwform_value_mw-wp-form-xxxというフィルターが用意されており、これを通すことでデータの整形が可能となります。
まずはフォームの設定から。
このフィルターはフォームタグのnameをキーにします。
ここでは日付を取得するのでnameをdateとします。
[[mwform_text name="date" size="60"]]
次にfunctions.phpにフィルター処理を追加します。
function my_mwform_value( $value, $name ) { if ( $name === 'date' && !empty( $_GET['post_id'] ) && !is_array( $_GET['post_id'] ) ) { return get_the_date( 'Y年m月d日', $_GET['post_id'] ); } return $value; } add_filter( 'mwform_value_mw-wp-form-422', 'my_mwform_value', 10, 2 );
フィルターのxxxの部分はフォーム識別子にある数字となります。
[[mwform_formkey key="422"]]
だと422で、mwform_value_mw-wp-form-422になるということですね。
処理はnameがdateでパラメーターにpost_idが設定してある場合のみ日付を取得して整形し返す。
それ以外は初期値を返すというもの。
結果
パラメーターはpost_idである必要もなくてなんでもOKです。
通る処理もなんでもいいので複数の値から計算させた結果を出力したりもできますね。
この場合valueを設定しているとそっちが優先されるようなので注意してください。
いま請け負っている仕事でフォームにカスタムフィールドの値を出す必要があり、MW WP Formでできるのかな?とちょっと調べてみたらデフォルトで対応しててびっくりww
カスタマイズも用意だし便利なプラグインだわー!