ワードプレスが簡単だなんて誰が言ったのか
ワードプレスはホームページとブログがセットになったようなもの。
だから、ワードプレスで作るページには
・固定ページ(ホームページ)
・投稿ページ(ブログ)
の2種類があり、投稿ページにだけ、カテゴリーという概念があります。
サイトの目的や運用方針によっては、特定のカテゴリーだけ、一切サイトの
見た目には登場させたくない場合があります。
例えば、特定の投稿をニュースサイトにRSS配信しようと思うと、配信対象の
投稿に専用のカテゴリーを割り当てて、RSSを出力するテンプレート側では
そのカテゴリーの投稿データだけを抽出して、配信先サイトの仕様に応じた
XML形式に整形します。
例えば「RSS」というカテゴリーを追加したとすると、あくまでもRSSの
配信対象を絞り込むためのカテゴリーなので、ブログページのカテゴリー名
に「RSS」と表示されては困ります。
「RSS配信に使ってる記事なんだな」
ということが一般ユーザーに分かってしまうからです。
この場合サイト内から「RSS」というカテゴリー名の表示を撤廃するには
どうすればよいでしょうか?
カテゴリーの表示が登場する全てのテンプレートファイルを修正しますか?
修正するといっても、カテゴリー名はHTMLでベタ書きしてあるのではなく、
the_category() などのワードプレス独自の関数(テンプレート関数)が
使われていますので、
【発想1】
the_category() は該当記事が属するカテゴリー名(複数あれば複数)を
列挙したHTMLを出力するなので、出力されたHTMLを文字列と見なし、
PHPやJavaScriptの文字列編集用の関数を使って「RSS」という文字を
消去してやる。
という方法が考えられます。
この発想を思いつくには2つのことを知っていればOKです。
1.the_category() の役割
2.文字列編集用の関数の存在
最初は誰でも知りませんから、どうやって調べるに至るかという考え方が重要です。
カテゴリーが表示されているページを見つける
↓
そのページのテンプレートファイルを見つける(テンプレート階層というルールを調べる必要あり)
↓
the_category() という表記を見つけ、これがカテゴリーの表示に変わるのだという推理をする
↓
推理を確かめるべく、ググる。
「ワードプレス the_category」で
検索すればOK.
このような流れで「知っている」に辿り着くわけです。
しかしこの方法では、テンプレート全てを精査しなければなりませんし、
プラグインの中にもカテゴリーを表示させるものがありますので、
プラグインのプログラムファイルも解読しなければなりません。
これは非効率ですよね。
そこで、フィルターフックの出番です。
ワードプレスのシステムが内部的に使っているファンクション(関数)の
多くは、私たちユーザーの自作関数で間接的に置き換えることができるよう
作られています。
それがフィルターフックという仕組み。
【発想2】
the_category() 関数の中で使われている、カテゴリー名を抽出する最も根本的な
関数をフックして、特定のカテゴリーを抽出対象から除外しておきます。
例)get_terms_args()
関数というのは、特定の機能を閉じ込めたプログラム部品のこと。
ワードプレスなどのシステムは、関数の中で関数を呼び出し、
さらにその関数の中で別の関数を・・・
というように関数を連鎖させています。
つまり、HTMLの構造と同じように、プログラム関数にも親子構造のような
呼び出し階層があるということです。
カテゴリーを表示する子関数が沢山あったとしても、子関数の中で同じ
親関数が使われていれば、親関数をフィルターフックしてやれば済む、
ということになります。
このような概念をPHPプログラムに置き換えて書けるようになるには、
ワードプレス特有の仕組みだけでなくプログラミングに関する一般的な
知識を要します。
▼概念
・変数
・スコープ
・関数
・戻り値
・構造体
・値渡し、参照渡し、ポインター
・オブジェクト
・echo
▼文法
・変数
・関数
・構造体
・コメント
・PHP開始タグ、終了タグ
これらを隠ぺいしてくれるのがプラグイン。
100%完璧に目的通りの機能を備えたプラグインがあれば、
「簡単にできる」
と思われるのでしょうけど、
上記のような知識がある人にとって
「プログラムを自分で書くよりは
簡単にできる」
というのが真実だと思います。
プログラミングは文法だけでは身に付かない
プログラム初心者は「どう書けばいいのか?」を知ろうとします。
でも、本当に身に付けなければならないのは書き方ではなくて、
「どういうプログラムにすれば目的通りになるのか?」
を考え付く力なんですよ。
その上で、
「じゃあ、書き方はどうすればいいんだろう?」
という流れでコードを書いていくのが正しいのです。
プログラミング歴20年のプロが教えるプログラミング講座、
開講しました。
スキルアップに興味のある方はコメント欄からお問い合わせ下さいね。