提问者:小点点

在短码循环中隐藏股票变化


我正在使用[products attributes=“someattr”terms=“someterm”]短代码来呈现产品循环。这里的问题是,如果任何变体缺货,我希望能够过滤掉该产品。以下内容无法满足我的需要:

add_filter('woocommerce_shortcode_products_query', 'modifyshortcode', 10, 3);
function modifyshortcode( $query_args, $atts, $loop_name){

if($loop_name == 'products'){
        $query_args['meta_query'] = array( array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => 'NOT LIKE',
        ) );
        return $query_args;
}

以上没有过滤掉库存状态为'outofstock'的产品。任何想法都将不胜感激。


共1个答案

匿名用户

我已经决定去一个更简单的woocommerce_product_is_visible过滤器解决方案,以下似乎为我工作,以防有人需要一个类似的:

add_filter( 'woocommerce_product_is_visible', 'hide_product_with_outofstock_variation', 10, 2 );
if(!function_exists('hide_product_with_outofstock_variation')){
    function hide_product_with_outofstock_variation( $is_visible, $id ) {

        $product = wc_get_product($id);
        $outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' );
        $product_variations = $product->get_children();

        foreach ($product_variations as $variation) {

           // Get variation stock status
           $stock_status = get_post_meta($variation, '_stock_status');

           // if variant property 'outofstock' return false
           if(in_array($outofstock_term->name, $stock_status)){
            $is_visible = false;
           }
        }

        return $is_visible;
    }
}