从最新更新中排除某些类别

时间:2016-06-06 作者:Jornes

我正在创建一个网站。有一个列显示最新更新。这是我现在拥有的代码。我不太擅长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>
但是,我想从某些类别中排除一些帖子。有什么解决办法可以实现吗?非常感谢。

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

除了蒂姆的答案外,人们还可以使用正确的答案tax_query. 所有内置标记和类别参数都将转换为适当的tax_query 在传递给WP_Tax_Query 类来构建JOIN SQL查询的子句。

我使用tax_query 在几乎所有的应用程序中,它都提供了很大的灵活性,特别是在涉及子术语、排除多个术语甚至多个分类法时。可能唯一的缺点是您不能像在OP中那样使用字符串语法,因为tax_query 是数组,应使用查询参数的数组语法

简而言之,要排除类别,可以尝试以下操作

$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 );

SO网友:Tim Malone

快速查看documentation for get_posts(), 看起来你无法根据帖子的类别排除帖子。

EDIT: 实际上,多亏了AntonChanning, 事实证明你可以-只需添加&cat=-1 到参数字符串,其中1是要排除的类别的ID:

$postslist = get_posts(\'numberposts=1&order=DESC&orderby=date&cat=-1\');
如果需要,您还可以添加多个类别,例如。cat=-1,-2,-3

首选的“Wordpress方式”是using WP_Query.

如果你想这样做,而不是get_posts(), 您需要创建一个WP\\u Query的新实例,并在数组中传递参数。从上述链接的类别参数标题下:

category\\uu not\\u in(数组)–使用类别id

这是您要用于排除类别的参数:

$postslist = new WP_Query(array(
  "post_type" => "post",
  "posts_per_page" => 1,
  "order" => "DESC"
  "orderby" => "date",
  "category__not_in" => 1,
));
你会注意到,我还添加了“post”post类型,以模仿你的行为get_posts(), 以及posts_per_page 参数是指定通过WP\\U查询返回的帖子数的方法。

如果使用此WP\\U查询路线,则需要进行的另一个更改是使用while 循环而不是foreach 您当前有。有clear usage examples 在文档中的“用法”标题下,我将避免复制和粘贴它们。

祝你好运