質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

コンタクトフォーム7に、カスタムフィールドの値を渡す方法(WordPress)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,520

d-y

score 13

前提・実現したいこと

ポータルサイトを制作しております。
サイト内に多数の会社を掲載しており、会社ごとに固定ページをカスタムフィールドで作成しています。

その会社ごとの固定ページからは、メールフォーム(コンタクトフォーム7にて作成)のページにリンクしており、
メールフォームでは、①会社名 ②会社の画像 が自動で表示され、
メールの送信先は ③その会社のメールアドレス になる仕様にしたいと考えております。
①②③は全て、カスタムフィールドに入力している値を取得したいです。
つまり、コンタクトフォームを掲載社の数だけ作るのではなく、コンタクトフォームは1つで、
メールフォームに紐づく固定ページのカスタムフィールドから値を取得し、
メールフォームに出力する会社名・画像や、送信先が変わる形を目指しています。

※例
https://www.riconhiroba.com/bengo/tokyo/tominsougou-rikon.html
このページで「メール相談フォームはこちら」をクリックすると以下のページにリンク。
https://www.riconhiroba.com/bengo_contact?post_id=15189
post_idに応じて、事務所名・画像・送信先アドレスを取得している

現状

会社名を、固定ページのカスタムフィールドから取得するために、
functions.php に以下を記述しています。

function wpcf7_officename() {
    return get_field( 'フィールド名が入ります', $post_id ) ;
}
wpcf7_add_shortcode( 'officename', 'wpcf7_officename' );

※officenameは、[officename]の形でコンタクトフォームに入れます。
[officename]には、指定したフィールドの値を出力したいです。

知りたいこと

固定ページのpost_idを自動取得できる関数?を知りたいです。

$post_id の部分はどのように記述するべきか分からないため。
メールフォームに紐づく固定ページのpost_idを指定できる関数?等があれば、解決するのかと予想していますが、
それが何か、分かっていません。

php等については学んでおらず、見様見真似でやっておりますため
情報不足かもしれませんが、教えて頂けますと幸いです。
またそもそも、記述が非効率かもしれませんが、その場合もお知らせ頂けますでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

固定ページのpost_idを自動取得できる関数?を知りたいです。

ループ内であれば、 $post->ID で ID を取得できますが、ループ外でページID を取得する関数は標準では用意されていません。
(固定ページは、基本的に pagename (スラッグ)をベースにしているためと思います。)

ページID を取得する方法が考える必要がありますが、ページ構成によって方法が変わります。


ページ構成がわからないのですが、Contact From 7 のショートコードは、どこに設置されていますか?
思いついた2パターンを記載しますが、これ以外であれば、具体的な構成を記載していただけないでしょうか。

1.各会社情報の表示ページにフォームのショートコードを設置

会社情報を表示するために WordPress ループがあると思うので、上記のように WordPress ループ内で、 $post->ID を参照することで取得できると思います。

2.メールフォーム専用の固定ページにフォームのショートコードを設置して、各会社情報のページからリンクタグ(<a href="フォームのURL">)で、呼び出している

メールフォーム固定ページが、どこのページから呼び出されたかを知る必要があるので、呼び出すためのリンク URL に 呼び出したページの ID を入れるような工夫が必要です。

フォームページを呼び出すURLの例: http://example.com/form/?pageid=呼び出し元のID

あとは、関数の中で、 filter_input(INPUT_GET, 'pageid'); 等の方法で、GET で引き渡された値(呼び出したページID)を取得します。


(2019.02.07追記)

うまくいかないというコメントを受けてテストしてみましたが、こちらでは問題なく表示できるようです。

一応、キャプチャーを追加しておきます。

カスタムフィールド定義
ACF

functions.php
functions.php

Contact Form 7 のフォーム作成
フォーム作成

会社の固定ページで、フォームへのリンクとカスタムフィールド項目の入力 (テーマを変更が手間だったので、pageid 付きのリンクを本文に記載しています。)
会社1

会社の固定ページのリンクをクリックして「問い合わせフォーム」を表示
フォーム表示

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/07 13:42 編集

    こちらでも試してみましたが、問題なく動くようです。
    一応、テストした際の画面キャプチャーを回答本文に追記しました。

    うーん。
    何かが漏れているだけだと思うのですが...

    各企業ページからフォームに飛ぶ「リンク」には、固定ページの ID は付いている状況でしょうか?

    フォームページのURL/?pageid=111 のように Webブラウザのアドレスバーに入力すると 表示されたりしますか?

    キャンセル

  • 2019/02/07 18:13

    できました!
    固定ページ側の、フォームへのリンクが、

    ```
    /form/?post_id=呼び出し元のID
    ```

    になっていたことが原因でした。

    ```
    /form/?pageid=呼び出し元のID
    ```

    にしたことで解決致しました。
    初歩的なところで見落としがあり、お手数おかけして申し訳ありません。
    サイトで試して頂き、キャプチャーまでつけて頂いて本当にありがとうございました。
    助かりました。感謝いたします!

    キャンセル

  • 2019/02/07 23:26 編集

    CHERRY様

    良ければ、もう1点質問させてください。
    カスタムフィールドに入力しているメールアドレスも取得して、フォームの送信先として使いたいのです。
    そのために、コンタクトフォームのメールタブ内にある「送信先」に、[officemail] と記述したいと思っております。

    カスタムフィールド名:mail_address
    ショートコード用の関数:officemail

    functions.php に以下の通り記載しました。

    ```
    function wpcf7_officename() {
    $post_id = filter_input(INPUT_GET, 'pageid');
    return get_field( 'officename1', $post_id ) ;
    }
    wpcf7_add_form_tag( 'officename', 'wpcf7_officename' );

    function wpcf7_officemail() {
    $post_id = filter_input(INPUT_GET, 'pageid');
    return get_field( 'mail_address', $post_id ) ;
    }
    wpcf7_add_form_tag( 'officemail', 'wpcf7_officemail' );
    ```

    また、「送信先」に [officemail] を使用するためには、フォームにも [officemail] を記述しておく必要があるようですので、フォームの最上部に以下のように記述しております。

    ```
    <p style="display:none;><label>送信先メールアドレス
    [email* officemail]</label></p>
    ```

    ただこれだと、display:noneの部分が必須入力ですので、非表示なのに入力必須という状態になり、メールを送信できません。
    どのような改善策があるか、お知らせ頂けると幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる