仅在主查询上使用POST_WHERE筛选器,而不是在新WP_QUERY的边上

时间:2019-06-19 作者:Joe

我有一篇帖子,其中为CPT归档页面设置了过滤器。这很好,但我在侧栏中有其他WP\\U查询对象不起作用,因为post\\U where过滤器也会影响这些对象。如何使过滤器只在主页上工作而不在侧边栏上工作?

add_filter(\'posts_where\', \'Where_Events\', 10, 1);
function Where_Events($where)
{
    global $wpdb;
    $current_date = new DateTime(\'now\');
    $current_month = $current_date->format(\'m\');
    $current_year = $current_date->format(\'Y\');

$query_month = get_query_var( \'eventMonth\', $current_month );
$query_year = get_query_var( \'eventYear\', $current_year );
$query_day = \'01\';
$query_date = $query_year .\'-\'. $query_month . \'-\' . $query_day;

// check date where function
//default return current month
if (! is_admin() && (is_post_type_archive(\'gnl_events\') && is_main_query())) {
    $where .= \' AND MONTH(events_occurence) = MONTH("\'.$query_date.\'")\';
    $where .= \' AND YEAR(events_occurence) = YEAR("\'.$query_date.\'")\';
}
return $where;
}

1 个回复
最合适的回答,由SO网友:MikeNGarrett 整理而成

这里的第二个参数有助于确定适当的上下文。

add_filter( \'posts_where\', \'Where_Events\', 10, 2  );
function Where_Events( $where, $wp_query ) { }
全球$wp_query 可以通过检查来告诉您该查询是否用于主查询$wp_query->is_main_query().