web-dev-qa-db-ja.com

最新の更新から特定のカテゴリを除外

私はウェブサイトを作っています。最新のアップデートの欄があります。これは私が今持っているコードです。私は本当にPHPコーディングが得意ではありません。誰かから指導を受けたいです。

<?php
 $postslist = get_posts('numberposts=1&order=DESC&orderby=date');
 foreach ($postslist as $post) :
    setup_postdata($post);
 ?>
<?php the_excerpt(); ?>
<p class="date"><?php echo get_the_date(); ?></p>
<span class="button">
<a href="<?php the_permalink(); ?>">Read More</a>

しかし、私は特定のカテゴリからいくつかの投稿を除外したいと思います。それを実現するための解決策はありますか?ありがとうございました!

4
Jornes

Timによる答えに加えて、常に適切な tax_query を使うことができます。すべての組み込みタグおよびカテゴリー・パラメーターは、SQL照会用のJOIN文節を作成するためにtax_queryクラスに渡される前に、適切なWP_Tax_Queryに変換されます。

ほとんどすべてのアプリケーションでtax_queryを使用しています。特に子の用語、複数の用語の除外、さらには複数の分類法の場合には、柔軟性が非常に高いからです。 tax_queryは配列なので、ここでは文字列の構文をOPのように使用することはできません。クエリ引数には配列の構文を使用する必要があります。

つまり、カテゴリを除外するために、次のことを試すことができます。

$args = [
    // Your other args
    'tax_query' => [
        [
            'taxonomy'         => 'category',
            'field'            => 'term_id',
            'terms'            => [1,2,3], // Array of term ids to exclude
            'operator'         => 'NOT IN', // Exclude
        'exclude_children' => false // Do not exclude the child terms from the terms defined to exclude
        ]
    ]
];
$postslist = get_posts( $args );
3
Pieter Goosen

get_posts() のドキュメントをちょっと見てみると、そのカテゴリに基づいて投稿を除外できるようには見えません。

EDIT:実際には、 AntonChanning のおかげで、できることがわかりました - 引数文字列に&cat=-1を追加するだけです。1は、除外するカテゴリのIDです。

$postslist = get_posts('numberposts=1&order=DESC&orderby=date&cat=-1');

必要ならば、これに複数のカテゴリを追加することもできます。 cat=-1,-2,-3


これを行うための望ましい 'Wordpressのやり方'は WP_Queryを使用する です。

get_posts()を呼び出す代わりに、このようにしたい場合は、WP_Queryの新しいインスタンスを作成し、引数を配列で渡す必要があります。 カテゴリパラメータ の見出しの下にある上記のリンクから:

category__not_in(配列) - カテゴリIDを使う

それが、カテゴリを除外するために使用する必要がある引数です。

$postslist = new WP_Query(array(
  "post_type" => "post",
  "posts_per_page" => 1,
  "order" => "DESC"
  "orderby" => "date",
  "category__not_in" => 1,
));

get_posts()の動作を模倣するために 'post'投稿タイプを追加したことに気付くでしょう。そしてposts_per_pageパラメータはWP_Queryで返される投稿数を指定する方法です。

このWP_Queryルートを進む場合に必要なもう1つの変更は、現在持っているwhileの代わりにforeachループを使用することです。 明確な使用例 の下の 使用方法 という見出しがあるので、コピーして貼り付けないようにします。

がんばろう!

4
Tim Malone