我是WordPress开发的新手,我有以下问题。
我使用此函数(声明为functions.php 我的主题的文件)来修改main query 这样,具有特定标签的帖子就不会显示在我的主页中:
function exclude_featured_tag_and_legacy_posts( $query ) {
$tagId = get_tag_ID("featured");
//echo("Featured Tag Id: + $tagId");
if ( $query->is_home() && $query->is_main_query() ) {
//$query->set( \'tag__not_in\', \'array(ID OF THE FEATURED TAG)\' );
$query->set( \'tag__not_in\', array($tagId));
}
}
add_action( \'pre_get_posts\', \'exclude_featured_tag\' );
如您所见,此函数在主查询创建之后但在执行之前执行,它修改主查询以排除名为
featured好的,看起来不错。现在我的问题是。如何进一步修改我的主查询,以便也排除属于特定类别的帖子?
所以我想把这两篇文章都排除在外featured 标签和属于legacy 类别
你能帮帮我吗?
SO网友:Pieter Goosen
pre_get_posts
和WP_Query
使用完全相同的参数,因此如果需要知道可以使用哪些参数pre_get_posts
, 只需访问WP_Query
抄本中的页码。
还有一个技巧可以用来获取所有参数(query_vars
) 您可以使用。只需将此添加到页面上,即可获得query_vars
从中,刷新页面,此函数将打印出所有query_vars
您可以使用pre_get_posts
和WP_Query
<?php global $wp_query; ?>
<pre><?php var_dump($wp_query->query_vars); ?></pre>
<?php
要排除类别,可以使用
cat
或
category__not_in
. 两者都采用类别ID,
cat
取整数和
category__not_in
数组。因此,在函数中可以执行以下操作之一
$query->set( \'category__not_in\', array(ARRAY OF CAT ID\'s));
OR
$query->set( \'cat\', \'ID\'s OF CAT\');
您只需确保您的回调函数
add_action
并且您的实际函数名不匹配。
exclude_featured_tag
必须是
exclude_featured_tag_and_legacy_posts