您正在使用的筛选器posts_where
影响SQL查询的创建,因此根据定义,它是在查询运行之前执行的,您可以得到任何搜索结果。
所以此时您不能循环遍历结果,您可以做的是从其他地方检索或硬编码不需要的项目列表,并使用它们修改查询。
Update
好的,这比用注释来解决问题更快。这可能并不完美,但应该是您想要什么的良好起点:
add_action(\'pre_get_posts\',\'exclude_pages\');
function exclude_pages( $query ) {
if( !empty( $query->query_vars[\'s\'] ) ) {
$pages = get_posts(array(
\'post_type\' => \'page\',
\'meta_query\' => array( array(
\'key\' => \'_wp_page_template\',
\'value\' => \'landing.php\',
)),
));
$exclude = array();
foreach( $pages as $page )
$exclude[] = $page->ID;
$query->set(\'post__not_in\', $exclude);
}
}