Динамические миниатюрные изображения WooCommerce для различных продуктов - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь создать функцию, которая устанавливает эскиз для переменных продуктов. На данный момент мне нужно было бы зайти в бэкэнд и применить изображение вручную, но я хочу что-то более динамичное.

Например, допустим, у меня есть переменный продукт под названием Лампа, внутри есть три дочерних продукта. Каждый дочерний продукт одинаков, но различается по цвету (синий, зеленый, желтый). Теперь я хочу, чтобы переменный продукт имел то же изображение, что и первый вариант, внутри, но если на странице магазина был применен цветной фильтр желтого цвета, я хочу получить изображение для этого варианта и отобразить его вместо миниатюры переменной.

Я почти создал эту функцию, но есть проблема, если утверждение может быть верным для разных продуктов, и я получаю несколько миниатюр для продукта.

Как я могу улучшить эту функцию?

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10);
add_action( 'woocommerce_before_shop_loop_item_title', 'set_product_image', 10);

function set_product_image() {
    global $product;

    if( $product->is_type('variable') ){
        foreach ( $product->get_visible_children() as $variation_id ){
            $variation = wc_get_product( $variation_id );

            $product_colour = strtolower( $variation->get_attribute('colour') );

            $filter_colour = $_GET['filter_colour'];

            if( $product_colour == $filter_colour){
                echo $variation->get_image( array(300, 300) );

            }else if( $product_colour != $filter_colour ){
                // echo $variation->get_image( array(300, 300) );

            }
        }
    }else if( $product->is_type('simple') ){
        if ( has_post_thumbnail() ) {
            echo $product->get_image( array(300, 300) );
        }
    }
}

1 Ответ

0 голосов
/ 29 августа 2018

Попробуйте этот код:

if( $product->is_type('variable') ){
    // image of first variation
    $default_image = '';
    foreach ( $product->get_visible_children() as $variation_id ){            
        $variation = wc_get_product( $variation_id );
        $product_colour = strtolower( $variation->get_attribute('colour') );
        // set image of first variation
        if( $default_image == '' ){
            $default_image = $variation->get_image( array(300, 300) );
        }
        $filter_colour = $_GET['filter_colour'];

        if( $product_colour == $filter_colour){
            // if filter applied, echo and return
            echo $variation->get_image( array(300, 300) );
            return;
        }
    }
    // filter not applied, return default image
    echo $default_image ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...