the_category()の使い方とセパレーター無しで出力する方法【ワードプレス】
ワードプレスの出力系のテンプレートタグはとても便利で、このthe_categoryもカテゴリーの文字列だけでなくリンクまで貼って出力してくれるという優れものです。でも、気が利くテンプレートタグほど細かい所が思い通りにならないのも事実。
今回、セパレーターを無くしたいなぁと思って、ちょっと考えてしまったので、改めて使い方と、カテゴリーをセパレーター無しで出力する時の書き方をまとめてみます。
~ 目次 ~
the_categoryの基本的な使い方
the_categoryの使い方をちょっとおさらい。もちろんですが、ループ内で使用します。
1 |
the_category( $separator, $parents, $post_id ); |
引数① $separator(区切り文字)
1番目の引数はセパレーター(区切り文字)。複数のカテゴリーを表示する場合に、カテゴリー間に自動的に挿入されます。
初期値は空文字列ですが、この場合はリスト(ul)に整形されて出力されます。
引数② $parents(親カテゴリーの扱い)
カテゴリーに階層を作っていて、その子カテゴリーに属している場合の、親カテゴリーの表示に関する指定をします。値は文字列でmultipleかsingleが入れられます。初期値は空文字列で、この場合はリンク付きの子カテゴリーのみを表示します。
ちょっと違いがイメージしにくいので、表示例を付けました。「WordPress」という親カテゴリーを持った、子カテゴリー「カスタマイズ」に属している場合の例です。
multiple
親カテゴリーと子カテゴリーを、それぞれリンク付きで表示。
親カテゴリー名と子カテゴリー名を表示して、それぞれのカテゴリーページへリンクしています。
例)
single
親カテゴリーと子カテゴリーを表示するが、リンクは子カテゴリーのみ。
この場合では表示上はmultipleと同じになりますが、子カテゴリー名に親カテゴリーの名前も含めたテキストで、子カテゴリーにリンクしています。ユーザーにはわかりやすいですね。
例)
初期値(空文字列の場合)
リンク付きの子カテゴリーのみを表示。
今回の場合はリンクテキストは「カスタマイズ」のみになります。カテゴリー名の付け方にもよりますが、親カテゴリーを表示しないので、ユーザーからは少しわかりづらいかもしれません。
例)
引数③ $post_id(投稿ID)
3番目の引数は投稿ID。
初期値はfalseで、この場合は現在の投稿の属するカテゴリーを表示します。
デフォルトの状態
1 |
the_category( '', '', false ); |
デフォルト、つまり引数無しでthe_category()と実行した場合は、引数を上の様に記述した状態と同じです。
セパレーター無しで表示する方法
今回、ちょっと考えてしまった、セパレーター無しで出力する方法です。
上の使い方の部分でも書きましたが、第1引数のセパレーターを省略しようが、空文字にしようが(初期値ですが)、やけくそになってfalseやらnullやら入力しても、結局は下の様にリスト(ul)になります。という訳で、テンプレートからいじっても消えません。
- WordPress
- カスタマイズ
知らないで使ったら「ええええええっっ!」って感じです…。
しかし、メニュー部分で使用される事を想定して作られた関数だと思えば、親切な機能ですよね。でも、今回はリストじゃ困るのでセパレーターを指定します。セパレーター無しで出力する方法は、関数に用意されていないようので、何か文字列を入れないとリストになっちゃいます。
結局のところ、the_categoryは引数で指定した文字列がそのまんまechoされるので、何も表示しないHTMLを書いてあげればセパレーター無しになります。下の2つがいいかなと思います。
<span></span>
空のHTMLタグを記述すれば、セパレーター無しで表示されます。
1 |
the_category('<span></span>'); |
コメントアウトでもOK
空タグを使うのが嫌という人には、コメントアウトでもOKです。こっちの方が素敵かもしれません。私はこっちにしました。
1 |
the_category('<!--セパレーター-->'); |
どうしてもソースから消したい場合
空spanタグのみならず、コメントアウトも入れたくないというマニアな方は、the_categoryフィルターフックを使って消しましょう。
以下のコードをfunctions.phpに貼り付けると、$separatorに何と書いても表示されなくなります。$separatorを空にしておくと、ul表示になっちゃうので、なんでもいいので何か入れておいてください。
1 2 3 4 |
function remove_separator($thelist,$separator){ return str_replace($separator,'',$thelist); }; add_filter('the_category','remove_separator',10,2); |
セパレーターに「あ」とか「a」とか、カテゴリーの文字列やHTMLで使われそうな文字列を指定してしまっている場合は、以下のように直接$separatorに記述した文字列を消すのがいいかもしれません。
1 2 3 4 |
function remove_separator($thelist){ return str_replace('<!-- セパレーター -->','',$thelist); }; add_filter('the_category','remove_separator'); |
最後に
the_categoryはget_the_category_listで取得した内容を、そのままechoで出力しています。get_the_category_list()の場合も同様に、最初のパラメータにコメントアウトなどを記述してやることにより、見た目上のセパレータは消すことができます。
ちなみに、これらのカテゴリー関係の関数は、wp_includes->category-template.php内で定義されています。仕組みを知りたい方や「どんな処理しとるんや?」と疑問に思う方は参照してみて下さい。