在购物车对象中获取WooCommerce变量产品附件库ID

时间:2017-08-24 13:17:15

标签: php wordpress woocommerce gallery cart

我这里有一个非常奇怪的问题。我想在购物车页面中使用第一个产品附件库图像作为产品缩略图。 所以我在cart.php中使用以下代码来获取图库附件ID:

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            $_product   = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
            $attachment_ids = $_product->get_gallery_attachment_ids();

奇怪的是,它完全适用于我的本地主机(我的测试网站,其中woocommerce版本是2.6.8)。但它无法在我的在线网站上获得可变产品的任何数据(哪个woocommerce版本是3.1.2)。但是,它可以获得简单产品的正确数据。

我使用print_r($_product)查看其中的数据,然后找出答案 WC_Product_Simple对象具有正确的图库图像ID,如下所示:[gallery_image_ids] => Array ( [0] => 1174 [1] => 1175 [2] => 1176 ) 但WC_Product_Variation对象在数组中没有值:[gallery_image_ids] => Array ( )

我认为这是由Woocommerce升级引起的。因为我的localhost具有完全不同的$ _product对象结构。

有没有人知道另一种方法来获取购物车页面中变量产品的图库ID?

1 个答案:

答案 0 :(得分:3)

  1. 方法get_gallery_attachment_ids()已弃用,已被WooCommerce 3中的get_gallery_image_ids()方法取代。
  2. WC_Product_variations本身没有画廊,它是拥有它的父级WC_Product_Variable。
  3. 所以你可以这样管理它:

    $product   = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
    $attachment_ids = $product->get_gallery_image_ids();
    // For Product variations
    if($product->is_type('variation') && empty($attachment_ids) ) {
        // Get the parent variable product
        $parent_product = wc_get_product( $product->get_parent_id() );
        $attachment_ids = $parent_product->get_gallery_image_ids();
        $image_id = $product->get_image_id(); // The variation main Image ID
    }
    // Testing output
    print_r($attachment_ids);