从帖子页面中排除一些类别

时间:2014-07-23 作者:toxen

我创建了一个名为“视频”的页面,该页面被设置为所有帖子都应该显示的帖子页面。这很好,但我想排除两个网站类别中的所有帖子。

我尝试了这个代码,但它不起作用,它是正确的页面id和正确的类别id。

    function exclude_category($query) {
    if(is_page(41)){
    $query->set(\'cat\', \'-42, -43\');
    }
    return $query;
    }
    add_filter(\'pre_get_posts\', \'exclude_category\');

2 个回复
最合适的回答,由SO网友:HU ist Sebastian 整理而成

是的,您的代码将失败,但不是因为上面的答案,而是因为这不是您要求的页面。

在编写时,您将页面“视频”设置为显示所有帖子的页面。

当页面设置为博客页面时,Wordpress将使用主页。php或索引。php根据模板的层次结构来显示博客页面,而不是页面模板。此页面被视为主页,因此is_home() 将在此页上返回true

因此,要排除类别,需要使用以下条件:

function exclude_category($query) {
    if(is_home()){
       $query->set(\'cat\', \'-42, -43\');
    }
    return $query;
}
    add_filter(\'pre_get_posts\', \'exclude_category\');
快乐的编码,

Kuchenundkakao

SO网友:Pieter Goosen

编辑:

我误读了这个问题,没有意识到该页面被设置为blogpage。我保留这个答案作为额外信息,只是为了向某人提供关于pre\\u get\\u帖子和页面模板的信息。我已经在对blogpage和is\\u home的投票结果中添加了其他信息*

原始答案:

正如您已经发现的那样,您的代码将失败。pre_get_posts 不适用于页面模板

pre_get_posts 无法用于更改页面请求(页面模板)的查询,因为is_page, is_singular, pagename 和其他属性(取决于是否使用了漂亮的永久链接)已经由parse_query() 方法请参见:查询概述。修改页面请求主查询的建议方法是使用newWP_Query 在页面模板本身中。

您的解决方案是在需要的页面上创建一个自定义查询WP_Query. 查看codex页面上的类别参数和示例

UPDATE 20-01-2015

用于运行pre_get_posts 在true Page上,请参见Using pre_get_posts on true pages and static front pages

结束

相关推荐

Exclude Specific Categories?

我当前用于显示类别的代码是<?php foreach((get_the_category()) as $category) { echo $category->cat_name . \' \';}?>我想排除名为“home featured”的类别或ID为“65”的类别如何将其添加到上述代码中?