【WordPress】多階層のカテゴリーを持つ投稿ページのパンくずリストを正しく出力する方法

By | Date : 2017/02/27 ( Last Update : 2017/04/09 ) | 76 views

皆さん、こんにちは~☆ シアです。

前に公開された「【脱プラグイン作戦】WordPressのパンくずリストを自作してみよう」の続きで、

今回は、WordPressで多階層のカテゴリーを持った投稿ページのパンくずリストを正しく出力する方法を紹介します。

 

1. get_the_category関数の課題点

WordpPressのget_the_category関数は、記事のIDを引数にその記事のカテゴリー一覧を取得するのでしたね。

例えば、「paizaオンラインハッカソン(POH)・Liteで動的計画法を復習する」(「プログラミング」→「C#」に所属)では、カテゴリーは以下のように並んでいます。

しかし、その配列の順番には特に決まりがないので、必ずしも子孫カテゴリー→祖先カテゴリーの順に並ぶとは限りません。単に配列を反転したものを列挙しただけでは意図しないパンくずリストが生成されてしまいます。

例えば、本サイトでリリースしている「すぱこみっく!」系の記事(「アプリ開発」→「モバイルアプリ」に所属)では、カテゴリーは以下のように並んでいます。

あれ、カテゴリーの並びが先ほどのと逆です!(汗)

本サイトのように、カテゴリーの階層が2層までなら、親と子を判別して並び替えればよいのですが、3層以上のカテゴリーにも対応させるには、さらに工夫が必要となります。

 

2. 多階層の投稿ページのパンくずリストを正しく生成する

get_the_category関数の戻り値である配列(WP_Term)の各要素には、カテゴリーIDの他に1つ上の階層のカテゴリーIDを格納するcategory_parentプロパティが定義されています。今回はそのプロパティを使って、祖先のカテゴリーを辿っていきます。

Fig-1. 祖先カテゴリーの探索

まずは、array_column関数でWP_Termオブジェクトのcat_IDプロパティを連想配列にキーに設定し、連想配列を作成します。

連想配列を列挙し、各要素のcategory_parentプロパティから1つ上の階層カテゴリーのIDを取得します。そのIDを連想配列のキーに指定して祖先のカテゴリーを取得し、子孫→祖先順に並び替えたカテゴリーリストを作成します。

作成したカテゴリーリストの要素数を比較し、最も多いものをパンくずリストとして使用します。その後にリストを反転して、親子順にソートします。

あとは、ソート済みカテゴリーリストを列挙して、カテゴリーのパンくずリスト生成すればOK。

これで、多階層の投稿ページのパンくずリストを生成するコードの完成です。

こうすることで、get_the_category関数で取得したカテゴリーリストの並び順にかかわらず、パンくずリストを正しく出力できます。

 

3. おわりに

今回は、WordPressで多階層のカテゴリーを持った投稿ページのパンくずリストを正しく出力する方法を紹介しました。

 

パンくずリストをプラグインから独自実装に換装する時、投稿ページのカテゴリーの並びからリストを生成するのに苦労しましたが、PHPの実行環境でシミュレーションして試行錯誤し、無事解決することができました。

このコードなら、将来カテゴリーが3層以上の記事を書いてもイケます!

それでは、See you~☆

 

この記事をシェアする
Chronoir.netのRSSフィードを購読する

About : シアたん(Xiia)

こんにちはー!時黒(トキクロ)博士によって開発された超高性能アンドロイド「Xiia(シア・クロノワール)」です。Chronoir.net の新マスコットキャラとして頑張っていきますので、よろしくお願いします!☆

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*