隐藏简码循环中的缺货变化

时间:2019-06-26 05:29:15

标签: php wordpress woocommerce

我正在使用[products attribute =“ 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;
}

以上内容并未过滤出库存状态为“缺货”的产品。任何想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

我已决定采用一个更简单的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;
    }
}