这看起来很简单,但不幸的是不是,因为wp_query
不允许基于多个参数(在本例中为类别和日期)排除帖子。可以基于多个参数进行选择,但不能排除。所以,要想做你想做的事,你必须以某种方式将你的两个论点捆绑在一起。从概念上讲,您可以选择不想要的帖子,然后使用该列表根据其ID将其排除在外。接下来:
add_action (\'pre_get_posts\', \'wpse308323_multiple_exclude\', 10, 1);
function wpse308323_multiple_exclude ($query) {
// only do this on home page for main query
if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
// define posts to exclude and get them
$args = array (
\'category_name\' => \'third-party\',
\'date_query\' => array(
array(
\'before\' => \'2 weeks ago\'
)
)
);
$q2 = new WP_Query ($args);
// extract an array of ID\'s from the posts retrieved in $q2
$q2_ids = wp_list_pluck ($q2->$posts,ID);
// exclude these ID\'s from the main query
$query->set (\'post__not_in\', $q2_ids);
}
}
免责声明:以上代码是为了说明这个概念。我还没有测试它,所以可能需要调试。一些参考资料: