Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WooCommerce针对各种产品的动态缩略图图像_Php_Wordpress_Woocommerce - Fatal编程技术网

Php WooCommerce针对各种产品的动态缩略图图像

Php WooCommerce针对各种产品的动态缩略图图像,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我正在尝试创建一个函数来设置可变产品的缩略图。目前,我将不得不进入后端并手动应用该图像,但我想要更具动态性的东西 例如,假设我有一个叫做Lamp的可变产品,里面有三个子产品。每个儿童产品都是相同的,但颜色不同(蓝色、绿色、黄色)。现在我想要的是可变产品具有与内部第一个变体相同的图像,但是如果将黄色滤色器应用于商店页面,我希望获得该变体的图像,并显示该图像,而不是可变缩略图 我几乎已经创建了这个功能,但存在一个问题,即if语句是否适用于不同的产品,以及我最终得到了该产品的多个缩略图 如何改进此功能

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

例如,假设我有一个叫做Lamp的可变产品,里面有三个子产品。每个儿童产品都是相同的,但颜色不同(蓝色、绿色、黄色)。现在我想要的是可变产品具有与内部第一个变体相同的图像,但是如果将黄色滤色器应用于商店页面,我希望获得该变体的图像,并显示该图像,而不是可变缩略图

我几乎已经创建了这个功能,但存在一个问题,即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) );
        }
    }
}
请尝试以下代码:

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

我自己刚刚创建了一些类似的东西,虽然你的代码使用较少,但我会尝试一下