代码之家  ›  专栏  ›  技术社区  ›  Reece

用于可变产品的WooCommerce动态缩略图

  •  0
  • Reece  · 技术社区  · 8 年前

    我试图创建一个函数,设置变量产品的缩略图。目前,我将不得不进入后端,并手动应用图像,但我想要更动态的东西。

    我几乎已经创建了这个功能,但是有一个问题:if语句对于不同的产品来说可能是真的,并且我最终得到了产品的多个缩略图。

    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 回复  |  直到 8 年前
        1
  •  1
  •   Ivnhal    8 年前

    请尝试以下代码:

    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 ;
    }