我正在使用以下代码为我的woocommerce产品使用自定义状态:
add_action( 'init', 'my_custom_status_creation' );
function my_custom_status_creation(){
$status_keys = array(
'retired'=>'Retired',
'sold-ooaks'=>'Sold OOAKs',
'consignment'=>'Sent to Consignment',
'pickbox'=>'Out on Pickbox'
);
foreach ($status_keys as $status_key=>$label){
$status_label = _x( $label, 'post', 'woocommerce' );
register_post_status( $status_key, array(
'label' => $status_label,
'public' => true,
'exclude_from_search' => true,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( $status_label.' <span class="count">(%s)</span>', $status_label.' <span class="count">(%s)</span>'),
) );
}
}
但是,当使用此代码片段时,从搜索结果中排除脱销产品的功能将不再起作用(此选项可以在woocommerce -〉settings -〉products -〉inventory中找到,并选中“Hide out of stock items from the catalog”(从目录中隐藏脱销产品))。
我已经测试了其他插件/代码停用,但脱销的产品继续出现在我的搜索结果。
我还以为
'exclude_from_search' => true,
会从搜索中排除这些结果,但似乎也不起作用。
我也试探着:
add_action( 'pre_get_posts', 'misha_hide_out_of_stock_in_search' );
function misha_hide_out_of_stock_in_search( $query ) {
if( $query->is_search() && $query->is_main_query() ) {
$query->set( 'meta_key', '_stock_status' );
$query->set( 'meta_value', 'instock' );
}
}
这确实可以防止脱销产品,但也可以防止其他搜索结果(即帖子、页面、事件)出现在搜索存档中。
如何确保搜索结果中不出现脱销产品,同时仍显示非产品结果,如帖子/事件/页面/等?
1条答案
按热度按时间thtygnil1#
您可以尝试将代码限制为仅适用于“产品”查询: