特定のカテゴリのみの記事を除外したい
-
特定のカテゴリ”のみ”所属している記事を排除したいのですがどうしたらいいでしょうか?
以下のコードでカテゴリーIDが3の記事は排除できますが、例えばカテゴリーIDが1と3に所属しているものは表示させたいのですができないですよね。この場合カテゴリーIDが3しかない記事を表示させたくないのですがいい方法があれば教えていただければと思います。
<?php $posts = get_posts('numberposts=6&cat=-3'); global $post;?> <?php foreach($posts as $post): ?> <dt><?php the_time('Y年n月j日'); ?></dt> <dd><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></dd> <?php endforeach; ?>
-
仕様だとその状態でしょうね。
なにかプラグインがあればいいんですが。逆に、カテゴリがさほど多くないという仮定ですが、除外するのではなくて、追加する方向ではどうでしょうか?
増やす方向で、カテゴリーが多いなら
<?php $terms = get_terms('category'); foreach ($terms as $term ) if ($term->term_id!=3) $cats[] = $term->term_id; $args = array('category__in' => $cats,'numberposts' => 6); ?> <?php $posts = get_posts($args); global $post;?> :
kvex さん
ブログとnewsに分けていて、ブログはこれからカテゴリーがどう増えるかわからないのでそのたびに増やすのもなぁ…と思って悩んでいました。newsだけは表示させたくなくて、ブログとnewsを兼ね備えている方は載せたいってのが動機です。
pluto1234 さん
ありがとうございます。試してみます。でも、運用で避ける方向で行くような気がします…。
get_postsで制御しないで、ループ内でif分岐とかしたらだめかなぁ?表示件数とかに影響でちゃうかしら?
ちょっとためしができないので、提案だけ投げてみました・・・こういう時kzさんとかうまいことやってくれるよねぇ(ぉ以下の理由で回答を控えていました。
1)質問内容だけからすると、表示しない記事を書いている必要性がわからない。本当は何か条件があって、こういう人には記事を見せないが、こういう人には見せるとかあるはず。管理者しか見ないのであれば下書きで構わないし、記事を公開する意味がわからない。
2)恐らくできるであろうプラグインはある(実際に自サイトで使用中)が、少し複雑なものなので、使い方を質問されても困るから、紹介すべきかどうか迷っている。
わたし以外にいろいろスクリプトやカスタマイズ方法で解決しようと回答されている方々がいらっしゃる(=わたしが疑問に思っている1)についても理解されている???)ので、静観していた次第ですが、実際のところどうなんでしょう?
あるカテゴリに属する記事は表示しないというのは、もう少し詳しく書いてもらわないとわたしには理解ができません。誰にも表示しないなら記事としての存在意義がないわけだから、何か条件があるんじゃありませんか?
その条件が、複数カテゴリに属するなら表示、というだけなら単一カテゴリに属する記事の存在意義がわからないという疑問のスタート地点に戻ってしまいます。
質問の意図するところを詳しく教えてください。というか、最初に書いて欲しいですね。
その内容によっては、解決するであろうプラグインはあります。
わたしのところでは、BuddyPressを使ったメンバー制にし、WP+BPの可能性をテスト・実践するサイトを公開していることから、いろいろ試しています。ディレクトリによってゲスト(=メンバーではない人、または、メンバーでもログインしていない人)には公開しないもの、ゲストにもメンバーにも公開はするが、ゲストとメンバーで表示する内容を変えているもの等々いろいろあります。サイトのブログに関しては、メンバーとゲストに表示する記事を設定しており、あるカテゴリに属するものはゲストに表示しないようにしています。
そのプラグインが有効かどうかが不明なので、もう少し質問内容を具体的に教えてください。
通常、自分で使用するプラグインは日本語表示できないものは言語ファイルを作成したり、スクリプトを修正したりしていますが、このプラグインについては管理者にしか表示されない(利用しない)ものなので日本語言語ファイルを作成していません。
結果、少し複雑なプラグインなので利用方法がわかりづらいかもしれませんから、自分でよくテストしながら使用していただく必要はあります。
もったいぶらずにプラグイン名をすぐ書いてもいいのですが、それだと質問の意図が最後まで明確にわからないまま「解決済み」となってしまう可能性もあるので、敢えてワンクッション置かせていただきます。
こういうみんなが自由に利用できるフォーラムは、自分のサイトのブログや掲示板やメモ帳ではありません。後々、同じような壁にぶつかった人たちが「検索・参考」にできるかどうかが大切だと思うからです。
サンプルとして、わたしのサイトのブログは:
http://bp.bng.net/info上記ご覧になると、「お知らせ(一般)」カテゴリに属していて表示されているものに混じり、恐らく一番トップに「お知らせ(メンバー用)」と「未分類」の2つのカテゴリに属する記事が表示されていると思います。
ありゃ?chestnut_jpさん難しく考えていません?
ブログとnewsに分けていて、ブログはこれからカテゴリーがどう増えるかわからないのでそのたびに増やすのもなぁ…と思って悩んでいました。
って、書いてあるので、ブログを書くときは普通に複数のカテゴリ(ID=1など)を使っていて、それ以外にnews(ID=3)ってカテゴリで投稿しているけど、ブログとしては表示したくない。でも内容はnewsなんだけどブログにも載せたい投稿があって、newsカテゴリ(ID=3)+他のカテゴリ(ID=1)のときはブログにも表示させたいってことだと理解していましたが…なんだかややこしいX(
newsカテゴリだけを除外はできるけど、それだと同じ内容でnewsカテゴリじゃない投稿をダブってしなければいけないので方法はないかな?ってことだと思います。(違う?)
まぁロジックとしては、除外するカテゴリを含み、かつ、カテゴリが1つしかない記事を除外するってロジックを組めばいいんじゃないかな…。
WP_query()あたりで出来そうなんだけれどねぇ。>> shokun0803さん
解説ありがとうございます。わかったようなわからないような(汗newsカテゴリだけに属しているものはブログとして表示したくないのだとすると、単純にnewsだけのものはページで、news+別のカテゴリのものはブログ記事で、というのが一番簡単というか、自分ならそうしちゃうと思うんですが、(なぜブログ記事として書くのかがやっぱりわからないので)きっとまだ充分質問内容を理解できていないんでしょうね・・・>自分
もう少し静観させていただきます(^^;
※newsカテゴリにのみ属する記事は、どこにどうやって表示するのかという情報も書いてください
スレ主です。見たら偉いことになっていて焦りますんですが…(^_^;
shokun0803さんの理解でいいです。
V.J.Catkickさん。
なるほど。何となく見えてきました。
if文でカテゴリーが複数有れば表示、elseで3以外表示…って感じでしょうか。chestnut_jpさん。
あまりわかりやすい説明でなくて済みません。※newsカテゴリにのみ属する記事は、どこにどうやって表示するのかという情報も書いてください
何か変に拘りすぎている様に感じます。newsの記事はお知らせのページとして
<?php $posts = get_posts(‘numberposts=6&cat=3’); global $post;?> 以下省略…
で表示させています。カテゴリーIDで3を含まない1個以上の単数もしくは複数のカテゴリーをカテゴリーNとすると
- カテゴリーIDが3のみの記事は表示しない。
- カテゴリーIDがNの記事は表示する。
- カテゴリーIDが3+Nの記事は表示する。
と言うことです。カテゴリーIDが3のみの記事をどう運用しているか言及しても数学的には意味はないように感じて申し上げませんでした。
例えば会社の休みのお知らせはnewsで、新製品情報はnews+ブログみたいな運用で不自然でしょうか。今のところはnewsとブログでcat=3とcat=-3で運用していますが、それでもいいかとは思っています。いろいろ検索しましたがcat=-3の記述はすぐ見つかりましたが、私の質問のような状況がなくてあまり難しくなければやってみたいなと思って書き込みました。需要もそれなりにあるとは思いますけど。
皆さんいろいろありがとうございます。
質問主のブログ運営方針がわからないと、とあるカテゴリに属する記事を非表示にした場合に、どうやってもそのカテゴリに属する記事を表示させることができなくなることもあるわけで、説明がないのに質問主から直接「拘りすぎてる」とお叱り受けるとは思いませんでした。
どういう仕組みでブログを運営する方針なのかがわからないと、需要がそれなりにあるかどうかもわからないと思うんですがねぇ(^^;
どうやらお役に立てないようです。失礼いたしました。
最近はブログの運営方針も書かないといけないようになったみたいですね。存じ上げなくて申し訳ございませんでした。
カテゴリーIDで3を含まない1個以上の単数もしくは複数のカテゴリーをカテゴリーNとすると
- カテゴリーIDが3のみの記事は表示しない。
- カテゴリーIDがNの記事は表示する。
- カテゴリーIDが3+Nの記事は表示する。
でもわかりにくかったようで私もこれ以上かみ砕いて説明できるほどの日本語力を擁しておりません。一番初めのお題で同様のことを述べているつもりでそれをわかりやすく箇条書きして整理したつもりだったのですが。現に他の方には理解していただいているように見受けられます。
それとカテゴリーID3をどこでどう表示させるのかわからないと返事できないと言うことも理解できていません。全ての情報を載せて読みにくく、一番知りたいことがどれなのかわかりにくい冗長な質問をするよりも端的に聞く方が答えが集まりやすいと思った次第です。確かに一番最初に上記の箇条書きで質問できたら良かったとは反省しております。ただブログの中身なんて関係ないと思います。運営方針を伺っている訳ではないのは質問からわかると思いますが。
こういうみんなが自由に利用できるフォーラムは、自分のサイトのブログや掲示板やメモ帳ではありません。後々、同じような壁にぶつかった人たちが「検索・参考」にできる様にある程度一般化して聞いた方がいいと思ったからこう聞いたまでです。
他の部分の調整が面倒そうですが、新着のみのカテゴリを一つ増やして
news:3
news-only:4とした場合に、記事を書く時のカテゴリを
newsのみ:3,4
news+新製品情報:3,他のカテゴリと登録すれば、 category=-4 でいけますね。通常の新着は3のカテゴリを表示すればOK。
欠点は運用が面倒になるのと、4のカテゴリを非表示にしなきゃいけないことです。まぁ、一つの案ってことで。
結局、現状どうなんですか?
できました?逆に、カテゴリがさほど多くないという仮定ですが、除外するのではなくて、追加する方向ではどうでしょうか?
という案を出した手前、それでサンプルコードを書こうか書くまいか迷ってるので、状況をお願いします。
kvex さん
ありがとうございます。現状ではカテゴリは2種類ですがnews以外は増える方向にあります。サンプルコードは不要です。
Shigemori さん
その方法はわかりやすいですね。その方向で行こうと思います。
ありがとうございました。
特定のカテゴリじゃないカテゴリに(も)属してる記事を持ってくるなら:
<?php global $wpdb; $sql = " SELECT p1.* FROM $wpdb->posts as p1 INNER JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID INNER JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id INNER JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id WHERE p1.post_type = 'post' AND p1.post_status = 'publish' AND t1.taxonomy = 'category' AND terms1.term_id NOT IN ( 123 ) ORDER BY p1.post_date DESC "; $posts = $wpdb->get_results( $sql ); foreach ( (array) $posts as $post ) : setup_postdata( $post ); ?> <h2> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </h2> <?php endforeach; wp_reset_postdata(); ?>
な感じで OK◎
#123を「特定のカテゴリ」の ID に変更してくださいねん。
#1記事にカテゴリが3つ以上あることもある場合:
SELECT DISTINCT p1.*
に変更してください。
- トピック「特定のカテゴリのみの記事を除外したい」には新たに返信することはできません。