我有一个名为“advanced_filter”的高级自定义字段,这是一个添加到所有帖子的真/假字段。如果该字段被选中,我想将 category__not_in 应用于该帖子。
如果帖子有某个类别,我不想显示帖子。类别 ID 是根据用户动态选择的,并在单独的函数中分配给 $post_category_id_array_diff_ids 变量。那工作正常。
我一直在使用 pre_get_posts 挂钩来修改查询,因为查询是由插件(tagDiv Composer)生成的,并且无法在模板页面上访问查询。
我正在尝试实现类似这个基本功能的东西:
function my_pre_get_posts( $query ) {
if ( !is_admin() && $query->is_category( 'Partner News' ) && ! $query->get('page_id') == get_option('page_on_front') ) {
$query->set( 'category__not_in', $post_category_id_array_diff_ids ); }
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );
但是,我不想对所有帖子都这样做。如果选中了自定义字段“advanced_filter”,我只想添加查询参数“category__not_in”。否则我不想修改查询。
我也尝试生成一个新的 WP_query 但这不起作用。
function my_pre_get_posts( $query ) {
if ( !is_admin() && $query->is_category( 'Partner News' ) && ! $query->get('page_id') == get_option('page_on_front') ) {
$args1 = array(
'posts_per_page' => -1,
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'advanced_filter',
'value' => '1',
'compare' => '='
)
)
'category__not_in' => $post_category_id_array_diff_ids
);
$q1 = new WP_query($args1);
if($q1->have_posts()) :
$firstPosts = array();
while($q1->have_posts()) : $q1->the_post();
endwhile;
endif;
}
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );
但这不起作用。
如何仅将 category__not_in 应用于选中了 advanced_filter 自定义字段的帖子而不应用于所有帖子。
谢谢!