サポート » プラグイン » 【MW WP Form】URL引数をもとにカスタムタクソノミーを取得して、フォーム上

  • 解決済 tokesta

    (@tokesta)


    求人情報を掲載するサイトを制作しており、最近発見したフォーム作成プラグイン「MW WP Form」を活用させていただいております。

    http://cube-biz.sakura.ne.jp/apply/?post_id=209

    URL引数をもとに、応募ボタンからフォーム画面までpost_idで情報を送ることには成功し、MW WP Formの管理画面で {カスタムフィールド名} と入力してカスタムフィールドの内容は表示されるのですが、カスタムタクソノミーが表示されません。

    カスタムタクソノミーを、管理画面のフォーム作成画面で、{カスタムタクソノミー名}のように使用する方法をわかる方がいらっしゃれば教えていただけませんか。

    フィルターフックをfunctions.phpに記述する方法で、
    「選択肢」として出力する方法や、
    http://plugins.2inc.org/mw-wp-form/manual/filter-hook/mwform_choices/

    「初期値」として設定する方法などもありますが、
    http://2inc.org/blog/2013/11/07/3832/

    カスタムタクソノミーを扱う場合のコードの書き方がわからず、2日間ほどハマっております。

    現状、以下のように書いて、真っ白になります。(初心者で恥ずかしい限りです)

    function my_mwform_value( $value, $name ) {
    	$value = $_GET['job_area'];
    	$terms = get_terms("job_area");
    	if ( !empty( $terms ) && !is_wp_error( $terms ) ){
    		foreach ( $terms as $term ) {
    			$term->name}
    	$value = ['job_area'];
    	return $value;
    }
    
    add_filter( 'mwform_value_mw-wp-form-286', 'my_mwform_value', 10, 2 );

    また {カスタムフィールド名} {カスタムタクソノミー名}を、フォーム画面で表示させるだけでなく、管理者宛メール・自動返信メールでも使用する方法も同時にご示唆いただければ嬉しいです。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • MW WP Form には {カスタムフィールド名} でカスタムタクソノミー(ターム)を表示する機能はありません。メール本文でターム名を表示したいのであれば mwform_value_フック で取得したターム名を hiddenフィールド に埋め込んで使用する形が簡単ではないかと思います。

    また、真っ白になるということですので、WP_DEBUGを有効にしてエラーを確認されると良いかと思います。

    スレッド開始 tokesta

    (@tokesta)

    Kitajimaさま

    ご返信ありがとうございます!大変嬉しいです。
    早速試して、またこちらでご報告したいと思います!

    [mwform_hidden name="タクソノミー名" value="ターム名"]

    となるように、フィルターフックを記述すればよいのですね!
    やってみます。ありがとうございます!

    スレッド開始 tokesta

    (@tokesta)

    上記をやってみましたが、管理者宛メールの{キー}が上手く表示されません。

    フォーム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 はきちんと渡されていますか?

    スレッド開始 tokesta

    (@tokesta)

    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}
    スレッド開始 tokesta

    (@tokesta)

    コードまで書いていただき、感動しております。
    フォーラムを利用したのは初めてなのですが、こんなに助けていただいて感謝の念が耐えません。

    しかし、上記をそのままテーマの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 );
    スレッド開始 tokesta

    (@tokesta)

    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"]

    のようにするとどうでしょう?
    ここまできたら僕も気になるので解決したいと思うのですが…

    スレッド開始 tokesta

    (@tokesta)

    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= は書かない。

    (定義とか違ってたらごめんなさい)

    ありがとうございました!解決しました!

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「【MW WP Form】URL引数をもとにカスタムタクソノミーを取得して、フォーム上」には新たに返信することはできません。