MW WP Form には {カスタムフィールド名} でカスタムタクソノミー(ターム)を表示する機能はありません。メール本文でターム名を表示したいのであれば mwform_value_フック で取得したターム名を hiddenフィールド に埋め込んで使用する形が簡単ではないかと思います。
また、真っ白になるということですので、WP_DEBUGを有効にしてエラーを確認されると良いかと思います。
Kitajimaさま
ご返信ありがとうございます!大変嬉しいです。
早速試して、またこちらでご報告したいと思います!
[mwform_hidden name="タクソノミー名" value="ターム名"]
となるように、フィルターフックを記述すればよいのですね!
やってみます。ありがとうございます!
上記をやってみましたが、管理者宛メールの{キー}が上手く表示されません。
フォームHTML(管理画面)記述内容
<div class="applied">
<h3>今回ご応募されるおシゴトはこちら!</h3>
<table border="1">
<tbody>
<tr>
<th>おシゴトタイトル</th>
<td>{post_title}</td>
</tr>
<tr>
<th>おシゴト番号</th>
<td>{wpcf-job_number}</td>
</tr>
<tr>
<th>給与</th>
<td>時給{wpcf-job_wage} 円</td>
</tr>
</tbody>
</table>
</div>
<div class="formcontent">
<h3>問い合わせ情報の入力</h3>
<table>
<tr>
<th>お名前<span style="color:red;">*</span></th>
<td>[mwform_text name="name"]</td>
</tr>
<tr>
<th>電話番号<span style="color:red;">*</span></th>
<td>[mwform_tel name="tel"]</td>
</tr>
<tr>
<th>メールアドレス<span style="color:red;">*</span></th>
<td>[mwform_text name="mail"]</td>
</tr>
</table>
</div>
[mwform_hidden name="job_area"]
<blockquote align="center"><span style="color:red;">*</span> は必須入力となります。ご協力ください。</blockquote>
<div align="center"><span id="submitback>"[mwform_backButton value="もどる"]</span></div>
<div class="btn" align="center">[mwform_submitButton name="この内容で送信!" confirm_value="確認" submit_value="送信"]</div>
テーマのfunctions.php記述内容
function my_mwform_value( $value, $name ) {
if ( $name === 'job_area' && !empty( $_GET['job_area'] ) && !is_array( $_GET['job_area'] ) ) {
return $_GET['job_area'];
}
return $value;
}
add_filter( 'mwform_value_mw-wp-form-286', 'my_mwform_value', 10, 2 );
管理者宛メール記述内容(管理画面)
応募者情報
名前:{name}
電話:{tel}
メール:{mail}
案件:
{post_title}
{url}
{pagename}
{page_id}
{permalink}
エリア:{job_area}
お仕事番号:{wpcf-job_number}
企業名:{wpcf-company_name}
hiddenフィールドのみならず、{name} {tel} {mail}以外はすべて管理者宛メールに表示されません。
知識がなく、原因が特定できませんでした。すみません。{wpcf-キー}は、プラグインtypesを使用して作成したカスタムフィールドのキー名です。WEBページのフォームでは、これらや{post_title}など、表示されております。
フォーム作成画面で
<th>おシゴトタイトル</th>
<td>{post_title}</td>
とするだけでは {post_title} をメールで飛ばすことはできません。
{post_title} もフォーム項目として送信する必要があるためです。
<th>おシゴトタイトル</th>
<td>[mwform_hidden name="post_title" value="{post_title}" echo="true"]</td>
とするとどうでしょうか?
job_area については、フックのほうで $_GET[‘job_area’] を使用するようにされていますが、URLの引数として job_area はきちんと渡されていますか?
Kitajimaさま
上記前半の方法を試して、{post_title}や{カスタムフィールド}の管理者宛メール上での表示に成功しました!ありがとうございます!!
>>job_area については、フックのほうで $_GET[‘job_area’] を使用するようにされていますが、URLの引数として job_area はきちんと渡されていますか?
フォームのページへ移動するボタンのaタグは、
<a href="<?php bloginfo('url'); ?>/apply?post_id=<?php echo $post->ID; ?>
だけだったので、job_areaとpermalinkを渡したいと思い、以下のように記述しました。
<a href="<?php bloginfo('url'); ?>/apply?post_id=<?php echo $post->ID ;>&job_area=<?php $terms = get_the_terms($post->ID, "job_area");
if ( !empty( $terms ) && !is_wp_error( $terms ) ){
foreach ( $terms as $term ) {
echo $term->name;
}
}
?>&permalink=<?php echo the_permalink(); ?>">
フォームのページのURLには渡せているようなのでvar_dumpしたところ、
job_areaは表示されましたが、permalinkは表示されませんでした。
また、hiddenフィールド(echo=”true”)は両方ともフォームのページでは表示されませんでした。
救いの手を差し伸べていただいている身で大変恐縮ですが、現状をまとめると以下のようになります。
・投稿のカスタムタクソノミーをURL引数でフォームに渡しているが、hiddenフィールドに設定されない (job_area)
・フォーム遷移前のシングルページのURLをフォームに渡せていない(functions.phpにもうひとつのfunction my_mwform_valueを記述すると白くなる=>複数のフィルターフックの書き方がわからない)
作者様のご厚意に大変感謝しております。
すみません、内容をよく理解していませんでした。
post_id だけ引数で渡せばフック内でターム情報、パーマリンクは取得できるので、job_area、permalink は引数で渡す必要はありません。
下記のような感じでどうでしょうか。(動作確認はしていないので、WP_DEBUGを有効にした上で動作確認されることをオススメします。)
フォーム作成欄
[mwform_hidden name="job_area" value="{job_area}" echo="true"]
[mwform_hidden name="permalink" value="{permalink}" echo="true"]
functions.php
function my_mwform_value_job_area( $value, $name ) {
if ( $name === 'job_area' && !empty( $_GET['post_id'] ) && preg_match( '/^\d$/', $_GET['post_id'] ) ) {
$terms = get_the_terms( $_GET['post_id'], 'job_area' );
$_terms = array();
if ( is_array( $terms ) ) {
foreach ( $terms as $term ) {
$_terms[] = $term->name;
}
}
return implode( ', ', $_terms );
}
return $value;
}
add_filter( 'mwform_value_mw-wp-form-286', 'my_mwform_value_job_area', 10, 2 );
function my_mwform_value_permalink( $value, $name ) {
if ( $name === 'permalink' && !empty( $_GET['post_id'] ) && preg_match( '/^\d$/', $_GET['post_id'] ) ) {
return get_permalink( $_GET['post_id'] );
}
return $value;
}
add_filter( 'mwform_value_mw-wp-form-286', 'my_mwform_value_permalink', 10, 2 );
メール作成欄
{permalink}
{job_area}
コードまで書いていただき、感動しております。
フォーラムを利用したのは初めてなのですが、こんなに助けていただいて感謝の念が耐えません。
しかし、上記をそのままテーマのfunctions.phpに書きましたが、表示されません。
WP_DEBUGをtrueにしても、特にエラーは出てきませんでした(><;
以下該当箇所のソースです
<p>高時給だから人気!パネルを梱包して運ぶおシゴト!<input type="hidden" name="post_title" value="高時給だから人気!パネルを梱包して運ぶおシゴト!" /><br />
777777<input type="hidden" name="wpcf-job_number" value="777777" /><br />
斎藤コーポレーション<input type="hidden" name="wpcf-company_name" value="斎藤コーポレーション" /></p>
<p><input type="hidden" name="job_area" value="" /></p>
<p><input type="hidden" name="permalink" value="" /></p>
hiddenフィールドは出力されていますが、valueは空のままのようです。
最初の3つの内2つはカスタムフィールド(typesプラグイン使用)ですが、動作しています。
リンク
あ、間違いがありました。
preg_match( '/^\d$/', $_GET['post_id'] ) )
↓↓
preg_match( '/^\d+$/', $_GET['post_id'] ) )
です。
一応修正版はっておきます。
function my_mwform_value_job_area( $value, $name ) {
if ( $name === 'job_area' && !empty( $_GET['post_id'] ) && preg_match( '/^\d+$/', $_GET['post_id'] ) ) {
$terms = get_the_terms( $_GET['post_id'], 'job_area' );
$_terms = array();
if ( is_array( $terms ) ) {
foreach ( $terms as $term ) {
$_terms[] = $term->name;
}
}
return implode( ', ', $_terms );
}
return $value;
}
add_filter( 'mwform_value_mw-wp-form-286', 'my_mwform_value_job_area', 10, 2 );
function my_mwform_value_permalink( $value, $name ) {
if ( $name === 'permalink' && !empty( $_GET['post_id'] ) && preg_match( '/^\d+$/', $_GET['post_id'] ) ) {
return get_permalink( $_GET['post_id'] );
}
return $value;
}
add_filter( 'mwform_value_mw-wp-form-286', 'my_mwform_value_permalink', 10, 2 );
Kitajima様
preg_match()
は、今回初めて拝見しました。上記はpost_id=xxxの「xxx」と符号しているのですね!勉強になります。
ただ今回もhiddenフィールドのvalueは空のままです。
確認するため、以下のようにフォームが設置してある固定ページ上でvar_dumpしてみました。
<?php var_dump($_GET['job_area']); ?>
<?php var_dump(get_the_terms( $_GET['post_id'], 'job_area' )); ?>
<?php var_dump(get_permalink( $_GET['post_id'] )); ?>
結果、post_idをもとにタクソノミーとパーマリンクが表示されました。
渡せてはいるようです。
フォーム固定ページ
そのまま表示させておきます。(WP_DEBUGもtrueになってます)
フォームショートコードの書き方には問題ないと思います。
[mwform_hidden name="job_area" value="{job_area}" echo="true"]
[mwform_hidden name="permalink" value="{permalink}" echo="true"]
2時間ほど試行錯誤しておりますが、原因が特定できません(xx;
管理者宛メールに、どの投稿を見て応募したか確認できるようURLの表示だけはカスタムタクソノミーをあきらめてでも優先したいと考えております。
現状でもカスタムフィールドで設定した照会番号をもとに管理画面で検索→投稿できますので、MW WP Formは仲間に勧めたい素晴らしいプラグインだと思います!
ショートコードを記述するときにvalue値が設定されているとフックが実行されません(一応、最初の投稿で挙げられている参考ページ内にも書いてありますね、僕自身忘れておりました…)。
[mwform_hidden name="job_area" echo="true"]
[mwform_hidden name="permalink" echo="true"]
のようにするとどうでしょう?
ここまできたら僕も気になるので解決したいと思うのですが…
Kitajima様!!
お悩み「MW WP Formで投稿記事のカスタムタクソノミーを管理者宛メールで表示させる」は解決しました!すべてKitajima様のご尽力のおかげです。心より感謝申し上げます。
ここまで親身になって解決してくださり、ますますこのプラグインが好きになりました。今後も活用させていただきたいですし、Kitajima様のご活動を応援してゆきます!!
今回は本当にありがとうございました!!
最後に教えていただいた手順をまとめてみました。
【目的】URL引数でフォーム設置ページに渡したpost_idをもとに、リンク元の記事のURLやカスタムタクソノミーを管理者宛メール(や自動返信メール)で使用する
【解決策】
Step1. フィルターフック my_mwform_value_キー名( $value, $name ) をfunctions.phpに記述する。URL引数で渡したpost_idをもとに、カスタムタクソノミーやパーマリンクを取得。$nameにひもづける。
Step2. フォーム(管理画面)上でhiddenフィールドを作成。name=キー名にすることで、初期値として設定。管理者宛メールの設定では、{name} 表示できるようになる。value= は書かない。
(定義とか違ってたらごめんなさい)
ありがとうございました!解決しました!