お菓子の中から駄菓子を取り出しその一覧を表示させよ。 ただし駄菓子はお菓子に含まれたままでなければならない。


※以下、内容は実際の案件に基づきますが、名称等は別にしてありますのであしからず。

要件:「お菓子」の中に含まれる「駄菓子」の一覧を「お菓子」の一覧ページで表示される形式で別個に用意してほしい。
  :ただし「お菓子」の一覧の中とサイドメニュー、ヘッダーのメニューには「駄菓子」が含まれたままにすること。

 初めてWPのカスタム投稿周りを触った案件で追加の要望がきました。
製品一覧の「お菓子」の項目で、その中に含まれる「駄菓子」の一覧を表示するページを別個に用意してほしいとのこと。ページ自体はお菓子を含め他の製品の一覧ページと共用なので、TOPの文言を「お菓子」から「駄菓子」に変える程度で特に問題なし。

 さて、どうやって駄菓子のみ表示させたものか?
最初にやったのが「駄菓子」のみ表示させることでした。
これで詰まったのが、
 あくまで「お菓子の中の駄菓子」として表示されてしまうこと。
 サイドメニューに駄菓子の一覧でなくお菓子の一覧が表示されてしまう。
 
 これは取り出す設定が不味いとすぐにわかったのですが、検索しても似たような案件で解決に至った記載が見つかりません。
親スラッグ「お菓子」の中から子スラッグである「駄菓子」の取り出し方がどーしても判らない。なら逆に「お菓子」を読み込んで「駄菓子」だけ表示する方法はないかと思い至ります。これもアイデアは出ますが、具体的にどう設定するか不明。なにせ直前のカスタム投稿周りもネットに挙げてあるコードを切った張ったでどうにか体裁を整えてる状態でしたから、そもそも自分のアイデアが形にできる代物なのか判別することすら不明という、八方どころか全方位完全閉鎖という塩梅。
半日かけて「これは先輩A氏にお伺いを立てよう」と諦め、その日は帰宅しました
 
 翌日、ループの設定の仕方が判らないのは置いとくとして、そもそもどこで情報を読み取ってるのか?ちょっと考えてみました。

 現状、製品の品種(タクソノミー:品種)で設定された親スラッグ「お菓子」の中の子スラッグ「駄菓子」に属する投稿の一覧を読みだそうとして上手くいっていません。そこで親スラッグ「駄菓子」を新規に作ればいいのでは?と思ったのですが、これだと「お菓子」の一覧を表示した際、サイドメニューの中に「駄菓子」が含まれなくなってしまいます。ヘッダーメニューも同様です。顧客の要望ではあくまで「お菓子の中に駄菓子が含まれること」

 ……あれ、これ二つのスラッグ(「親:お菓子>子:駄菓子」と「親:駄菓子」)の両方にチェック入れればいいんじゃね?
結果的に、これで「お菓子」ページの表示内容を据え置きで、「駄菓子」ページに駄菓子の一覧を表示することができました!そして、結果的にヘッダーメニューの一覧に追加した「駄菓子」の項目が増えました。おおぅ……。 
ここは直感的に「非表示にできる項目があるはず」とネット検索。「get_terms」中に「exclude」を置いて「駄菓子の」IDを設定することで一覧から退去していただきました。

 これですべて片付いたように見えましたが、最後に一つ。ヘッダーメニューの「駄菓子」のリンクから「駄菓子」一覧のページに飛びたいのですが、現状では「お菓子」ページの駄菓子項目に飛んでしまいます。直接飛べるリンクは先ほど非表示にしてしまったので、ここはヘッダーメニューが生成される際に「お菓子」の中の「駄菓子」のスラッグが回ってきたら、「駄菓子」ページに飛ぶリンクに差し替えるようにIF文を仕込んで対応しました。

 最初は「お菓子」中の駄菓子のリンクから、駄菓子用ページをコピーして用意した専用のタクソノミーページに飛ぶようにしたのですが、同じ内容のページが2種あるのは後々管理が煩雑になってダメだろうと、まっとうな方法(?)に切り替えました。

 これにて要望をクリア。
どーにか先輩A氏の手を煩わせずに済みましたが、問題解決に時間がかかり過ぎているのを痛感しました。
もっと問題解決に向けて多角的に発想できるようにするのと、そもそもの技術レベルの底上げが必要だと思った次第でした。

この記事が気に入ったらサポートをしてみませんか?