サポート » 使い方全般 » サイドバーに特定カテゴリーを除外した月別アーカイブを表示したい

  • 解決済 syoshin

    (@syoshin)


    はじめまして。
    PHPはまったくの初心者で、行き詰っています。どうかお力をお貸し下さい。

    例えばカテゴリーID 1,2,3 と3つのカテゴリーがあって、サイドバーでカテゴリーID 1の投稿だけ除外して表示したいのです。
    <?php wp_get_archives(); ?>を使うと

    <ul>
    	<li>2009年12月</li>
    	<li>2009年11月</li>
    	<li>2009年9月</li>
    	<li>2009年7月</li>
    	<li> 以下略... </li>
    </ul>

    のように表示されますが、これだと投稿のあるすべてのカテゴリーが表示されてしまいますよね?
    特定カテゴリーの除外(wp get archives)が私のやりたいことに一番近いように思えましたが、このコードだと投稿のタイトルまで表示されてしまいます。

    現在 date.php と index.php は
    <?php query_posts($query_string . "&cat=-1"); ?>
    カテゴリーID 1 は表示されないようにできたのですが、「2009年12月」にカテゴリーID 1 の投稿しかない場合でも、
    <?php wp_get_archives(); ?>だと
    サイドバーの「2009年12月」自体は表示されてしまうので、カテゴリーID 2,3 の投稿があった時だけサイドバーの月間アーカイブを表示されるようにしたいのです。

    特定カテゴリーを除外するプラグインも試してみましたが、すでに多くのプラグインを入れているせいか私の環境では動作しませんでした。

    ですので、プラグインを使わずに上記のようなことをしたいのです。

    wp_get_archives() にパラメータを渡す方法で特定のカテゴリーを除外することはできないのはわかりましたが、 wp_get_archives() を使わず、 query_posts を使えば私の希望する表示ができるのかな?という気もするのですが、何せ全く知識がないためどうしたらよいのかわかりません。

    上手く説明できなくて申し訳ないのですが、私のやりたいことが伝わりましたでしょうか?

    どうかよろしくお願いいたします。

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

    (@jim912)

    syoshinさん、こんにちは。

    下記のコードをテーマのfunctions.phpに追加いただければ、wo_get_archivesを用いてカテゴリー1を除外することができるかと思います。

    function cat_limited_wp_get_archives( $where ) {
    	global $wpdb;
    	$cat_string = 1;
    	$where .= " AND $wpdb->posts.ID NOT IN ( SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy = 'category' AND tt.term_id IN ($cat_string) )";
    	return $where;
    }
    add_filter( 'getarchives_where', 'cat_limited_wp_get_archives' );
    トピック投稿者 syoshin

    (@syoshin)

    jim912様

    上記の記述で無事希望のカテゴリーを除外することができました!!
    本当にありがとうございます!!

    functions.php って何でもできてしまうのですね。 凄いです。

    もうひとつお聞きしたいのですが、もし、今後除外したいカテゴリーIDが増えた場合どのようにしたらよいのでしょう?

    ためしに

    $cat_string = 1; の部分を

    $cat_string = 1,4,5; 

    という風にしてみたらエラーになってしまいました。(汗)

    トピック投稿者 syoshin

    (@syoshin)

    自己解決しました。

    $cat_string = '1,4,5';

    のようにしたら、無事表示できました。

    シングルクォーテーションで囲まなければいけなかったのですね。

    jim912様、この度は本当にありがとうございました。

    PS. jim912様の作成されたプラグインは素人にも導入しやすく、どれも重宝させていただいております。プラグイン制作は大変だとは思いますが、期待していますのでこれからも頑張って下さい。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「サイドバーに特定カテゴリーを除外した月別アーカイブを表示したい」には新たに返信することはできません。