首页 > 解决方案 > WordPress 检查查询是否针对 pre_get_posts 过滤器中的自定义类型

问题描述

我正在尝试使用pre_get_posts过滤器修改自定义帖子类型查询:

function custom_query( $query ) {

   $meta_query = array(
        array(
            'taxonomy' => 'a_tax_name',
            'field' => 'slug',
            'terms' => 'a-slug-name'
        )
    );
    $query->set('tax_query', $meta_query);

    return $query;

}

add_action('pre_get_posts', 'custom_query');

它可以工作,但查询也适用于我页面上的所有查询(菜单项、侧边栏、页脚等)。我只希望它修改自定义帖子类型查询。我尝试在函数中添加:

if( $query->is_main_query() ) {
  return;
}

或者

if ( 'my_custom_post_type' !== get_post_type() ) {
   return;
}

但不工作。如何pre_get_posts仅在自定义帖子类型上使用过滤器?

标签: phpwordpress

解决方案


例如,您可以使用$query->get('post_type')从查询变量中检索帖子类型并在条件中使用它。


推荐阅读