您正在使用pre_get_posts
不正确。
你不应该return
您应该操作传递到过滤器中的查询对象,而不是修改全局变量例如:
function modify_onthisday_cat( $query ) {
if ($query->is_category(7) && $query->is_main_query() ) {
global $post; // not going to be set yet
$query->set( \'day\', date(\'d\') );
$query->set( \'post__not_in\', array($post->ID) ); // and this will fail
}
}
add_action( \'pre_get_posts\', \'modify_onthisday_cat\');
不过,正如评论中所指出的,这对主查询不起作用(您似乎打算这样做),因为
$post
只有在主查询运行后才会填充,这是确定
$post
. 我想你必须更详细地解释你的目标。
至少对于单篇文章页面来说,下面这样的内容应该更有效。
function modify_onthisday_cat( $query ) {
$post_id = get_query_var(\'p\');
if ($query->is_category(7) && $query->is_main_query() && !empty($post_id)) {
$query->set( \'day\', date(\'d\') );
$query->set( \'post__not_in\', array($post_id) );
}
}
add_action( \'pre_get_posts\', \'modify_onthisday_cat\');