wp カテゴリ一覧ページだけ全件表示(2)
javascriptとexcelカテゴリの組み合わせのときに問題発生してた。
javascriptカテゴリ表示ってのは問題ないけど、excelカテゴリ表示ってすると何故かjavascriptカテゴリを表示する。
調べるとget_the_category()で取得するのに問題発生してるっぽい。
- foreach((get_the_category()) as $cats) {
- $catID = $cats->cat_ID;
- }
この記述に問題があった。
javascriptとexcelカテゴリの組み合わせのときは、まず、「$catID」にexcelのカテゴリIDをいれて、次にjavascriptのカテゴリIDを入れてるっぽい。
調べるとループを一回にすれば良いって言う人が何人かいたから同じようにしたんだけど結果はダメ。
excelカテゴリ表示ってのは問題なくなったけど、逆にjavascriptカテゴリ表示ってすると何故かexcelカテゴリを表示する。
さらに調べるとget_the_category()は、カテゴリ名でソートされた状態になってるとか。
つまり上記でい言うトコロの「$cats」には「excel、javascript」って順にソートされてるってこと。
一回で止めたら「excel」のIDを取得してループ抜けるってことだな。
どうにかして条件分岐したいと思いつつsingle_cat_title()に着目。
これが出力じゃなくて、値のみ取得できればと思い、どうにかしようと調べた。
結局、分らないからWPのPHPファイルの調査。
「echoか何か出力してる箇所をどうにかすればいいじゃん」って感じで調査。
関係のありそうなファイルをダウンロードして「single_cat_title()」でgrep。
「wp-includes/general-template.php」にいたので、「single_cat_title()」の関数の塊(?)をコピペして「single_cat_title2()」を作成。
「echo」のとこを「return」で返すようにしてみた。
さらに「foreach((get_the_category()) as $cats)」中でif文追加。
- $catname = single_cat_title2();
- foreach((get_the_category()) as $cats) {
- if( $cats->cat_name == $catname){
- $catID = $cats->cat_ID;
- }
- }
※いつのまにかもっと便利になってた。wp カテゴリータイトルの取得(2013.02.08)
とりあえず動作するっぽいってことでめでたし、めでたし。
…の予定だったんだけど「single_cat_title()」はどうやってカテゴリを吐き出すのかを見てみたら「$cat = intval( get_query_var(‘cat’) );」ってのでカテゴリIDを取得してるみたいな感じ。
正直「wp-includes」の中のファイルをいじるのは怖いから「「$cat = intval( get_query_var(‘cat’) );」のみ直接記述したほうがよくない?」ってことで「wp-includes/general-template.php」を元に戻す。
次にforeachの中身を変更。
- $cat = intval( get_query_var(‘cat’) );
- foreach((get_the_category()) as $cats) {
- if( $cats->cat_ID == $cat){
- $catID = $cats->cat_ID;
- }
- }
「これでOK!」と思ったんだけどカテゴリID取れるんなら、わざわざget_the_category()を使う必要ないじゃんってことでごっそり削除。
最終的には下記のような感じで落ち着いた。
最終的に落ち着いたソース
- <?php
- $catID = intval( get_query_var(‘cat’) );
- $newQuery = “posts_per_page=-1&cat=” . $catID;
- query_posts($newQuery);
- ?>
- <?php if (have_posts()) : ?>
修正前は下記。
wp カテゴリ一覧ページだけ全件表示