快速解释搜索是搜索,而不是存档。
如果你看看is_post_type_archive
docs,您将看到:
检查查询是否针对给定帖子类型的存档页。
所以如果你在你的pre_get_posts
, 这样就不会影响搜索结果。
另一方面,此meta\\u查询:
$q->set( \'meta_query\', array(array(
\'key\' => \'_stock_status\',
\'value\' => \'outofstock\',
\'compare\' => \'NOT IN\'
)));
表明您只想获取具有此元值集且不同于
outoofstock
, 因此,它将排除所有帖子和页面(因为它们根本没有这样的元数据)。
解决方案
add_action( \'pre_get_posts\', \'hide_out_of_stock_from_search\' );
function hide_out_of_stock_from_search( $q ) {
if ( ! is_admin() && $q->is_main_query() && $q->is_search() ) {
$q->set( \'meta_query\', array(
\'relation\' => \'OR\',
array(
\'key\' => \'_stock_status\',
\'value\' => \'outofstock\',
\'compare\' => \'NOT IN\'
),
array(
\'key\' => \'_stock_status\',
\'compare\' => \'NOT EXISTS\'
)
));
}
}