php 使用自定义状态时,从WordPress搜索结果中排除脱销产品不起作用

eyh26e7m  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(78)

我正在使用以下代码为我的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' );
    } 
}

这确实可以防止脱销产品,但也可以防止其他搜索结果(即帖子、页面、事件)出现在搜索存档中。
如何确保搜索结果中不出现脱销产品,同时仍显示非产品结果,如帖子/事件/页面/等?

thtygnil

thtygnil1#

您可以尝试将代码限制为仅适用于“产品”查询:

add_action( 'pre_get_posts', 'misha_hide_out_of_stock_in_search' );

function misha_hide_out_of_stock_in_search( $query ) {

    if( $query->get('post_type') === 'product' && $query->is_search() && $query->is_main_query() ) {
        $query->set( 'meta_key', '_stock_status' );
        $query->set( 'meta_value', 'instock' );
    } 
}

相关问题