サポート » 使い方全般 » 三階層に設定したカテゴリでエントリを絞り込めるようにしたい

  • 解決済 nebura

    (@nebura)


    WordPress2.7をCMSとして使いイラストレーションのギャラリーサイトを作っています。

    各作品のエントリには親となるカテゴリ「ギャラリー」を設定し、
    その子カテゴリに描画素材として「アナログ」又は「デジタル」を設定し、
    さらに孫カテゴリに作品が公開された「展示名」をつけて
    描画素材、又は展示名で絞り込めるようにしようとしているのですが
    ある展示名カテゴリの時のみ絞り込みがうまくいかず、困っています。

    category.php には、以下のように記述し現在のカテゴリIDを取得し、
    テンプレートを一つで対応出来るようにしています

    <?php
    foreach((get_the_category()) as $cat) {
    $cat_id = $cat->cat_ID ;
    break ;
    }
    $query = 'cat=' . $cat_id. '&order=ASC';
    query_posts($query) ;
    ?>

    ※このソースはこちら(http://blog.magical-remix.net/igalog/archives/99)を参考にさせていただきました

    現在展示名カテゴリは4種類あり6つの作品をそれぞれに振り分けていまして
    WP管理画面の投稿一覧では、各作品の状態は以下の通りです。

    • 作品1 展示名A/アナログ/ギャラリー
    • 作品2  展示名A/アナログ/ギャラリー
    • 作品3  展示名B/ギャラリー/デジタル
    • 作品4  展示名C/ギャラリー/デジタル
    • 作品5  アナログ/ギャラリー/展示名D
    • 作品6  アナログ/ギャラリー/展示名D

    ご覧の通りカテゴリの順番がそれぞれ違うのですがこれは
    英数字 > 日本語五十音 の順に 親/子/孫 関係なく並んでいるようです。

    ここで問題の、絞り込みがうまく出来ない展示名カテゴリなのですが
    カテゴリの最後に表示されている「展示名D」です。

    展示名Dで絞り込んだ場合、展示名Aの作品までヒットしまうのです。

    取得する親/子/孫カテゴリの順は下階層から上階層にではなく、管理画面の” 英数字 > 日本語五十音 “なのでしょうか
    その場合なにか対処法がありましたらご教示いただければ幸いです。
    よろしくお願いいたします。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • モデレーター jim912

    (@jim912)

    neburaさん、こんにちは。

    おやりになりたいことは、カテゴリーに属する記事を古い方から表示したいということでよいですか?

    カテゴリーを表示する際には、グローバル変数の$catにカテゴリーIDが入っていますので、こちらを利用されたほうが簡便です。

    具体的なコードは下記のようになります。

    <?php
    $query = 'cat=' . $cat. '&order=ASC';
    query_posts($query) ;
    ?>

    トピック投稿者 nebura

    (@nebura)

    jim912さん、返答ありがとうございます。

    カテゴリーに属する記事を古い方から表示したいというのは間違っていないのですが、こちらはすでに実装できています。

    問題になっているのは、現在のカテゴリIDを取得しループタグに代入することにより
    カテゴリの数と同数のテンプレート(category-*.php)を用意することなく
    category.phpだけで済まそうとした際に、意図したカテゴリ検索ができないということです。

    因みにサイドバーには描画素材カテゴリである「アナログ」と「デジタル」の全子カテゴリリストを
    表示できるようにしてあります。

    このリストから絞り込みたい展示名カテゴリをクリックする仕組みです。

    えっと、
    ・展示名Aで絞込み検索を行うと作品1、作品2が表示される
    ・展示名Bで絞込み検索を行うと作品3が表示される
    ・展示名Cで絞込み検索を行うと作品4が表示される
    が、
    ・展示名Dで絞込み検索を行うと作品1、作品2、作品5、作品6が表示される
    ということでしょうか。

    カテゴリの親、子、孫関係はどのようになっているのかが気になりますが、アナ/デジが一番親で展示名A~Dが孫とかになっていますか?
    「各作品の状態」を見ると「展示名D」を表示した場合は「アナログ」のカテゴリIDを取得してしまっていて、上記のような絞込み結果になっているような気がします。

    トピック投稿者 nebura

    (@nebura)

    shokun0803さん、返答ありがとうございます。

    症状はおっしゃる通りです。

    カテゴリの親、子、孫関係は以下のようになっています。

    親)ギャラリー
           ┗子)アナログ
                  ┗孫)展示名A 展示名D
           ┗子)デジタル
                  ┗孫)展示名B 展示名C

    「各作品の状態」を見ると「展示名D」を表示した場合は「アナログ」のカテゴリIDを取得してしまっていて、上記のような絞込み結果になっているような気がします。

    その可能性が高いと思います。

    php上でのカテゴリID取得順が確実に 孫 > 子 > 親 となっていれば問題ないのかと思うのですが行き詰っております。

    phpの記述では break ; により一つ目のカテゴリIDを取得したところで取得が止まるようにしてるのですが、こちらが間違っているのでしょうか。

    カテゴリの親子関係は良く分かりました。
    問題の解決には孫カテゴリのIDを確実に取得することですね。
    example.com/?cat=3などのように直接カテゴリIDを指定しても絞込みに失敗しますか?
    念のためWordPress Classicテーマなどで上記絞込み表示を試してみるなどして動作を確認したうえで、リスト表示した場合に該当アドレスで呼び出せるように調整が必要ですね。
    具体的なソースなどはちょっと調べてみます。待ってくださいね。

    p.sどなたかすぐ分かる方がいればきっとすぐに示してくれますよ;P

    トピック投稿者 nebura

    (@nebura)

    shokun0803さん

    パーマリンク設定をカテゴリベースにしているので example.com/展示名Dスラッグ のように入力してみましたが駄目でした。

    ご親切に対応していただきありがとうございます。
    私の方でも進捗があり次第報告いたします。

    よろしくお願いいたします。

    大変お待たせしました。

    <?php
    $cat_id = get_query_var('cat');
    $query = 'cat=' . $cat_id. '&order=ASC';
    query_posts($query) ;
    ?>

    こんなんでどうでしょう?

    モデレーター IKEDA Yuriko

    (@lilyfan)

    $cat_id = get_query_var('cat');
    $query = 'cat=' . $cat_id. '&order=ASC';
    query_posts($query);

    これだと2ページ目以降が出てこないので、以下のようにしてみてください。

    $cat_id = get_query_var('cat');
    $paged = get_query_var('paged');
    $query = 'cat=' . $cat_id. '&order=ASC&paged=' . $paged;
    query_posts($query);
    トピック投稿者 nebura

    (@nebura)

    shokun0803さん
    lilyfanさん

    ありがとうございます。
    示していただいたソースに書き換えたところ正常に検索出来ました!

    カテゴリIDの取得方法にはいろいろあるのですね。
    目から鱗です、とても勉強になりました。
    一時はスラッグ名の頭に09等の年号をつける方法で問題を回避しようかと思っていました…。

    返答してくださった方々どうもありがとうございました。
    特にshokun0803さんには感謝しております。

    以上にて解決済みとさせていただきました。

    lilyfanさんフォローありがとうです(*^_^*)

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「三階層に設定したカテゴリでエントリを絞り込めるようにしたい」には新たに返信することはできません。