助力をいただきたいので質問させていただきます。
イメージとしては、
example.com/shop/shop-a
example.com/shop/shop-b
example.com/shop/shop-c ...
固定ページ(親 /shop )の子階層ページが複数あり、shopの子ページすべてにsingle.php相当の共通テンプレートを適用させたい、という意図です。
子ページ用テンプレートファイルは仮にpage-shop-template.phpとしております。
避けたいこと
- 素直にカスタム投稿などでarchive-shop.phpとsingle-shop.phpにするのが
おそらく一番手っ取り早いと思いますが、それはできないという状態です。
(実際に新規サイトだったら、私もそれを検討すると思います)
- 管理画面→固定ページ の各ページからテンプレート選択は【例外的に個別テンプレートの設定が必要なページ】のみに利用したいため避けたいです。
(同様の構成の子ページが、分類によっては数十ページある状態、というのも理由です。)
###試したこと①
page-shop-template.phpを一旦page-shop.phpに変更してみましたが、
これでは当然/page/部分への適用になるだけで意味はありませんでした。
試したこと②
https://www.genius-web.co.jp/blog/website-operation/wordpress-toggle-the-display-for-each-parent-and-child-page-of-a-fixed-page.html
こちらのページを参考にして、親ページ/子ページの判定をfunctions.phpに記述いたしました。
その後、子ページに自動的にpage-shop-template.phpを読み込ませる方法が分からない状態です。
仕様上、純粋なpage.phpのファイルの使用予定はないため、
空のpage.phpにif分岐→locate_template()の記述で振り分けができないかも試しましたが無理でした。
(コードが間違っている可能性もあるため、下記サンプル記述いたします。)
php
1【functions.php】 2function page_is_ancestor_of($slug){ 3 global $post; 4 5 // 親か判別したい固定ページスラッグからページ情報を取得 6 $page = get_page_by_path($slug); 7 $result = false; 8 if(isset($page)){ 9 foreach ($post->ancestors as $ancestor) { 10 if($ancestor == $page->ID){ $result = true; } 11 } 12 } 13 return $result; 14} 15 16【page.php】 17<?php if(page_is_ancestor_of('shop') { 18 locate_template('page-shop-template.php',$load); 19} ?>
上記の内容では、functions.phpは問題ないようですが、page.phpでエラーが吐かれるだけでした。
どうぞ、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/30 11:58