WordPressで投稿のカテゴリを判別したり、色々やる!
こんにちは。
昨日ブログを更新しようとしたら盛大に寝落ちしてしまいました。
何事も早めにこなすのが一番ですね。
最近、朝起きてカーテンを開けるとき、陽の光と一緒に花粉も侵入してきそうでしばらく開けるのを躊躇う僕です。
そんな今日はWordPressについてです。
先日、WordPressを使ったサイトで、
”あるカテゴリの場合のみ、この(特定の)コンテンツを表示させたい!”
という依頼を受けました。
つまり、
・投稿のカテゴリを取得
・↑で取得したカテゴリが指定したカテゴリかどうかを判別
・↑の結果によってコンテンツの表示・非表示を決定
ということですね。
最近は色々WP関連の開発はやっていなかったですし、色々調べながらやってみました。いい機会なのでその内容を書き記しておくことにします。
CodexからマッチするWP関数を探す
まずは、codexを見ながら合いそうな関数を探してみます。
https://wpdocs.osdn.jp/関数リファレンス
今回やりたいことにマッチしそうなものがいくつか見つかりました。
名前で大体これかな、っていうのがわかりやすいのがwp関数のいいところですね。
今回使ったのは以下の二つ関数。(これだけで実装できるのはありがたいです)
get_term_children
引数にタームID(カテゴリID)、タクソノミー名を取ります。
タームIDに対象である親カテゴリのIDを入れればその子カテゴリIDを配列にまとめて返してくれます。
in_category
引数にカテゴリIDまたはカテゴリオブジェクトを入れればその投稿が引数で入れたカテゴリIDのカテゴリに属するか返してくれます。
WP関数を使って実装する
コンテンツの表示対象のカテゴリは、カスタムフィールドを用いて、管理画面から登録できるようにしました。
そうすれば対象カテゴリに変更を加えたいときに開発者じゃなくてもできますしね。
(今回はカスタムフィールドに関しては省きます)
まずは管理画面で登録したカテゴリをget_fieldで取得。
そしてin_categoryの引数に取得したカテゴリIDまたはカテゴリオブジェクトなどを渡します。先ほど紹介した通り、そうすれば投稿がそのカテゴリに属するか判別してくれます。
ただ、それだけだと、子カテゴリまでは含まれません。
なので、get_term_childrenを使って、そのカテゴリの子カテゴリを取得してそれもin_categoryに渡せるようにします。
こんな感じで関数をfunctions.phpなどで定義して、どこでも使えるようにすると便利ですね。
1 2 3 4 5 6 7 8 |
function is_included_category($cat_id, $post_id) { $children = get_term_children($cat_id->term_id, 'category'); if (in_category($cat_id)) { return true; } else if (!is_wp_error($children) && in_category($children)) { return true; } } |
WPを使ったサイト制作は、エンジニアの中では賛否両論という感じがあるかもしれませんが、
個人的には、ブログサイトを簡単に作りたい、けどゴリゴリにカスタマイズできるようにはしておきたい
という感じであればWPは結構便利かな〜と思います。
(PHPをよく使うのであれば尚更)
世界的にもそのシェアは圧倒的のようですし。
とはいえ、色々CMSだったりは登場していますし、
いろんなものを試してみるのも楽しそうです!