在WooCommerce购物车和结帐页面中获取父产品缩略图过滤器

时间:2015-06-09 15:46:43

标签: woocommerce

我想知道是否有办法在WooCommerce的购物车和结帐页面中显示所有子产品的父产品缩略图。做这样的事情有过滤器吗?

1 个答案:

答案 0 :(得分:1)

购物车中的所有缩略图均通过woocommerce_cart_item_thumbnail filter

$thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key );

但是,如果变体没有自己的缩略图,WooCommerce会自动显示其parent's thumbnail

/**
 * Gets the main product image.
 *
 * @param string $size (default: 'shop_thumbnail')
 * @return string
 */
public function get_image( $size = 'shop_thumbnail', $attr = array() ) {
    if ( $this->variation_id && has_post_thumbnail( $this->variation_id ) ) {
        $image = get_the_post_thumbnail( $this->variation_id, $size, $attr );
    } elseif ( has_post_thumbnail( $this->id ) ) {
        $image = get_the_post_thumbnail( $this->id, $size, $attr );
    } elseif ( ( $parent_id = wp_get_post_parent_id( $this->id ) ) && has_post_thumbnail( $parent_id ) ) {
        $image = get_the_post_thumbnail( $parent_id, $size , $attr);
    } else {
        $image = wc_placeholder_img( $size );
    }
    return $image;
}

如果您没有看到这一点,那么您可能已经过时了主题模板。

编辑

有了更多信息,您显然是指分组产品。你总是可以判断一个产品是否已经分组了#34;因为post_parent设置为分组产品的产品ID。作为post_product为0的顶级产品。您可以在传递给我提到的第一个过滤器的数据中找到post_parent信息:woocommerce_cart_item_thumbnail以提供以下信息:

add_filter( 'woocommerce_cart_item_thumbnail', 'so_30736886_cart_item_thumbnail', 10, 3 );
function so_30736886_cart_item_thumbnail( $image, $cart_item, $cart_item_key ){
    if( isset( $cart_item['product_id'] ) && isset( $cart_item['data'] ) && $cart_item['data']->post->post_parent > 0 ){
        $_parent = wc_get_product( $cart_item['data']->post->post_parent );
        $image = $_parent->get_image();
    }

    return $image;
}

如果产品有post_parent,那么我们会获得父级" Group"的缩略图。产品。