この場合は、お問い合わせフォームはsingle.phpで作るべき
固定ページか記事ページかでいえば、個人的には固定ページを使います。
お問い合わせフォームのテンプレートは同じで、その上の部分の商品情報が変わるだけだけですし。
まぁ好みなので、以下は記事ページを使うものとして進めます。
同じカテゴリー内で2つの異なるsingle.phpテンプレートを使い分けることはできるのでしょうか?
(※商品詳細のsingle.php と 商品についてのお問い合わせフォームのsingle.php)
その場合はどのような条件分岐になるのでしょうか?
おそらく条件分岐で(A)(B)に分岐することお考えでしょうか?
(A)普通に商品ページを表示したとき
→「商品詳細のsingle.php」を表示
(B)商品ページからの問い合わせフォームへ来たとき
→「商品についてのお問い合わせフォームのsingle.php」を表示
であれば「single-product.php」と「single-contact.php」というテンプレートを作り、「single.php」では以下のように分岐します。
これはcookieという機能を使いブラウザに登録された商品情報を取得し、その有無でテンプレートを分岐する方法です。
↓「single.php」
php
1<?php
2// 前ページ情報を取得
3$p_id= isset($_COOKIE['p_id']) ? $_COOKIE['p_id'] : '';
4
5// 前ページに合わせて表示内容を分岐
6if( $p_id=='' ){
7 // 前ページ情報がなければ商品詳細を表示
8 get_template_part('template-parts/single-product');
9}else{
10 // あれば商品についてのお問い合わせフォームを表示
11 get_template_part('template-parts/single-contact');
12}
13
続いて、上はcookieの有無でテンプレートを分岐しているので、cookieを登録する機能を作らないといけません。
そこで「functions.php」に以下を書きます。
これはお問い合わせフォームのページじゃなければ商品情報(その商品のページID)をcookieに保存し、お問い合わせフォームではcookieを削除するという処理です。
こうしてcookieの有無を登録すれば、上の「single.php」で条件分岐ができますね。
尚、以下はお問い合わせフォームのスラッグを'contact'
としてますが、ここは適宜ご変更ください。
↓「functions.php」
php
1<?php
2add_action( 'get_header', 'set_cookies');
3function set_cookies() {
4 if( ! is_single('contact') ){
5 $p_id = get_the_ID();
6 setcookie('p_id', $p_id, time()+3600*24*7, '/');
7 }else{
8 setcookie('p_id', '', time()-1, '/');
9 }
10}
11
最後にお問い合わせフォームに商品情報を掲載する方法です。
「single-contact.php」に以下を書き、cookieに入っている前ページの商品ID($p_id
)を使い、その情報を引っ張ってきます。以下はthe_title($p_id);
でタイトルだけ表示しています。
<?php
// 前ページ情報を取得
$p_id = isset($_COOKIE['p_id']) ? $_COOKIE['p_id'] : '';
// 前ページの情報を表示
echo '<p>あなたが見た商品はこちらです。</p>';
the_title($p_id);
?>
/// 問い合わせフォームを表示
<form>
<textarea placeholder="お問い合わせ内容を入力"></textarea>
<button type="submit">送信</button>
</form>
ざっくりとですがこのような流れになると思います。
がんばってください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/01 10:03
2019/09/02 00:18 編集
2019/09/04 04:07
2019/09/04 23:47
2019/09/05 02:18
2019/09/05 02:22