我应该承认,我的SQL知识很差,所以我将使用非SQL方法来实现这一点。
Here is my idea:
使用
pre_get_posts
在执行主查询之前更改查询变量。因为所有查询变量都已按时间设置
pre_get_posts
运行时,您只需根据需要更改它们,而且条件标记也可用,因此您可以有条件地执行所需的操作。
例如,您说需要排除某个术语,因此可以使用tax_query
要从主查询中排除术语,请使用is_tax
在特定分类页面上允许该术语
像这样的东西可能有用请注意:这未经测试
function wpse_exclude_term( $query ) {
if ( !is_admin() && $query->is_main_query() && !is_tax( \'TAXONOMY_NAME\', \'TERM_NAME/SLUG/ID\' ) ) {
$tax_query = array(
array(
\'taxonomy\' => \'TAXONOMY_NAME\',
\'field\' => \'slug\',
\'terms\' => \'TERM_SLUG\',
\'operator\' => \'NOT IN\'
),
);
$query->set( \'tax_query\', $tax_query );
}
}
add_action( \'pre_get_posts\', \'wpse_exclude_term\' );
RUNDOWN ON SOME OF THE IMPORTANT CODE
!is_tax( \'TAXONOMY_NAME\', \'TERM_NAME/SLUG/ID\' )
条件检查,检查您是否not 在特定分类页面上。注意NOT运算符(!
)!is_admin() && $query->is_main_query()
基本上只需确保只在主查询和前端进行更改\'operator\' => \'NOT IN\'
这不包括tax_query