🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

PHP

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

Q&A

解決済

1回答

911閲覧

孫カテゴリーのテンプレートを親カテゴリーと一緒にしたい。

hiro1613

総合スコア11

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/11/26 20:40

親カテゴリ
├子カテゴリA
│├孫カテゴリA01
│└孫カテゴリA02
└子カテゴリB
. └孫カテゴリB01

上記のような構造でカテゴリーのテンプレートを親カテゴリーのテンプレートを孫まで適応させたいです。

php

1function child_category_link_custom( $query = array()) { 2 3 if (isset($query['category_name']) && strpos($query['category_name'], '/') === false && isset($query['name'])) { 4 $parent_category = get_category_by_slug($query['category_name']); 5 $child_categories = get_categories('child_of='.$parent_category->term_id); 6 foreach ($child_categories as $child_category) { 7 if ($query['name'] === $child_category->category_nicename) { 8 $query['category_name'] = $query['category_name'].'/'.$query['name']; 9 unset($query['name']); 10 } 11 } 12 } 13 return $query; 14} 15add_filter('request', 'child_category_link_custom');

function.phpに上記を書いて子カテゴリーまでは親と同じテンプレートにできましたが、
孫カテゴリーになると「ページが見つかりませんでした。」になり表示できません。

どなたかやり方をご教授頂けないでしょうか。
よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

category-{$slug}.phpのテンプレートを
親子カテゴリで共有したいってことでいいんですかね?

テンプレートを変えるためにリクエストデータを書き換えるというのは
ちょっと乱暴な感じなので、素直にテンプレートの選択処理を書き換える方向で

うちのプラグイン内に同様の機能があるので共有

php

1 2//子カテゴリのテンプレート選択候補に親カテゴリのテンプレートを加える 3add_filter('category_template_hierarchy',function($templates){ 4 $term=get_queried_object(); 5 if($term->parent>0){ 6 $ancestors=[]; 7 while(!empty($term->parent)){ 8 $ancestors[]=(int)$term->parent; 9 $term=get_term($term->parent,'category'); 10 if(is_wp_error($term) || in_array($term->parent,$ancestors)){break;} 11 array_splice($templates,-1,0,'category-'.$term->slug.'.php'); 12 } 13 } 14 return $templates; 15});

投稿2020/11/27 02:12

KazuhiroHatano

総合スコア7819

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

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

hiro1613

2020/11/27 03:33

ありがとうございます。 わかりにくい質問ですみません。 親カテゴリ ・子カテゴリA ・孫カテゴリA01 ・孫カテゴリA02 ・子カテゴリB ・孫カテゴリB01 テンプレートをslugでわけるわけでなく、 全く同じレイアウトなので、 全てのテンプレートをcategory.phpで表示させたいということです。 今後カテゴリーが増える場合もあるので・・・
KazuhiroHatano

2020/11/27 03:42

category-{$slug}.phpのテンプレートがなければ カテゴリーアーカイブはcategory.phpで表示されるかと思うのですが 現状はなぜ親子カテゴリで違うテンプレートになってるのでしょうか? あるいはカテゴリーアーカイブではないページ カテゴリに属する投稿の個別ページでcategory.phpを使いたい ということなのでしょうか?
hiro1613

2020/11/27 04:08

孫カテゴリーになると「ページが見つかりませんでした。」となるので、 根本的に何か別のfunctionの影響かもしれません。 今やってみましたが、一番初めに書いたfunctionを消すと 子カテゴリも「ページが見つかりませんでした。」になります。 ページネーションとかもfunctionに書いてあるので、 再度全てのfunctionを消去してやってみます。
KazuhiroHatano

2020/11/27 04:23

パーマリンクの設定の問題のように思います QueryMonitorを入れて意図したルールでURLが処理されているかなど確認してみましょう https://querymonitor.com
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問