скрыть нестандартные варианты в цикле шорткода - PullRequest
0 голосов
/ 26 июня 2019

Я использую шорткод [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 голосов
/ 27 июня 2019

Я решил использовать более простое решение для фильтрации 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...