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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

5257閲覧

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

d-y

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/05 15:03

編集2019/02/06 00:20

前提・実現したいこと

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

その会社ごとの固定ページからは、メールフォーム(コンタクトフォーム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等については学んでおらず、見様見真似でやっておりますため
情報不足かもしれませんが、教えて頂けますと幸いです。
またそもそも、記述が非効率かもしれませんが、その場合もお知らせ頂けますでしょうか。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

固定ページの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/06 00:33

編集2019/02/07 04:40
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d-y

2019/02/06 02:33

CHERRY 様 早速のご回答ありがとうございます。 まさに、2の構成です。メールフォームのURLは、書いて頂いた通り、 http://example.com/form/?pageid=呼び出し元のID にしている状態です。 そこで質問なのですが、filter_input(INPUT_GET, 'pageid'); は、 以下の記述にどのように書き足すと良いでしょうか。 function wpcf7_officename() { return get_field( 'フィールド名が入ります', $post_id ) ; } wpcf7_add_shortcode( 'officename', 'wpcf7_officename' );
CHERRY

2019/02/06 03:08

[Contact Form 7 4.6 リリース](https://contactform7.com/ja/2016/12/03/contact-form-7-46/) に > WPCF7_Shortcode は非推奨に > > WPCF7_Shortcode クラスは廃止予定につき使用非推奨になります。カスタムコードで WPCF7_Shortcode を使用している場合は WPCF7_FormTag に変更してください。そうしないと、デバッグモードで運用している場合に警告が表示されます。 とありますので、wpcf7_add_form_tag() で、記載します。 $post_id に値を入れたいので、` $post_id = filter_input(INPUT_GET, 'pageid'); ` のように記載します。 質問にあるコードだと 最初に1行追加して、こんな感じでしょうか。 ``` function wpcf7_officename() { $post_id = filter_input(INPUT_GET, 'pageid'); return get_field( 'フィールド名が入ります', $post_id ) ; } wpcf7_add_form_tag( 'officename', 'wpcf7_officename' ); ```
d-y

2019/02/06 04:38

丁寧に教えて頂き、ありがとうございます。 現状、以下の状態ですが、メールフォームには固定ページから呼び出した会社名は表示されていない状態となっています。 何か思い当たる原因等ございますでしょうか。 ●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' ); ``` ●固定ページ(各会社情報のページ)のカスタムフィールドに、フィールド名「officename1」があり、ここに会社名を入れる(この値を呼び出したい) ●コンタクトフォーム7のフォームテンプレートに、[officename] と記述 ●メールフォーム専用の固定ページ(http://example.com/form/)に、フォームのショートコードを設置
CHERRY

2019/02/06 06:03 編集

もしかすると return get_field( 'officename1', $post_id ) ; は、 echo get_field( 'officename1', $post_id ) ; の間違いでしょうか? return は、値を戻す。 echo だとその場で表示する。の違いですが...
d-y

2019/02/07 01:00

return でも echo でも、以下のように固定ページのIDを指定すると、カスタムフィールドの値が表示されました。 return get_field( 'officename1', 111 ) ; echo get_field( 'officename1', 111 ) ; ということは、 filter_input(INPUT_GET, 'pageid'); で固定ページのIDが取得できていないのかと思います。 私の方でもIDを呼び出す方法を調べてみます。 その他、思い当たる箇所があれば、お知らせ頂けると幸いです。 宜しくお願い致します。
CHERRY

2019/02/07 03:08 編集

Contact From のフォーム作成画面で、[officename] は、どのように記載されていますか? 他のタグの中に 入っていたりしますか?
d-y

2019/02/07 03:46

「フォーム」タブの最上部に、以下のように記載しています。 ``` [officename]にメール相談 <label> お名前 (必須) [text* your-name] </label> <label> ふりがな (必須) [text* phonetic] </label> ```
CHERRY

2019/02/07 04:48 編集

こちらでも試してみましたが、問題なく動くようです。 一応、テストした際の画面キャプチャーを回答本文に追記しました。 うーん。 何かが漏れているだけだと思うのですが... 各企業ページからフォームに飛ぶ「リンク」には、固定ページの ID は付いている状況でしょうか? フォームページのURL/?pageid=111 のように Webブラウザのアドレスバーに入力すると 表示されたりしますか?
d-y

2019/02/07 09:13

できました! 固定ページ側の、フォームへのリンクが、 ``` /form/?post_id=呼び出し元のID ``` になっていたことが原因でした。 ``` /form/?pageid=呼び出し元のID ``` にしたことで解決致しました。 初歩的なところで見落としがあり、お手数おかけして申し訳ありません。 サイトで試して頂き、キャプチャーまでつけて頂いて本当にありがとうございました。 助かりました。感謝いたします!
d-y

2019/02/07 14:58 編集

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の部分が必須入力ですので、非表示なのに入力必須という状態になり、メールを送信できません。 どのような改善策があるか、お知らせ頂けると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問