首页 > 解决方案 > 仅修改具有 meta_query 值的帖子的 WordPress $query 并应用 category__not_in 参数

问题描述

我有一个名为“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 自定义字段的帖子而不应用于所有帖子。

谢谢!

标签: wordpressgetpostspremeta-query

解决方案


推荐阅读