在Woocommerce中最后添加到购物车产品ID

时间:2018-09-11 18:17:22

标签: php wordpress woocommerce cart

我尝试了所有来自google的代码,但是它们都不起作用。

例如:

$items = WC()->cart->get_cart();
$product_id = end($items)['data']->post->ID;

例如,

鞋子有两种不同的颜色:黑色和灰色。我先添加了黑色鞋子,然后又添加了灰色鞋子,最后订购了黑色鞋子。

它应该返回黑色鞋子的ID,但顶部的代码将显示灰色鞋子的ID。

我想要最后添加的产品,而不是最后一位的产品。

3 个答案:

答案 0 :(得分:0)

已编辑 我认为您在寻找产品属性ID?例如绿色或蓝色等。

$cart = WC()->cart->get_cart();
$variation = end($cart)['variation'];

// This will have ID, slug, count, etc.
echo json_encode( get_term_by( 'name', end($variation) , str_replace( "attribute_", "", key($variation))) );

如果您只是特定于属性,则可以像ta一样根据其ta大小更改属性

$cart = WC()->cart->get_cart();
$variation = end($cart)['variation']['attribute_pa_size'];

// This will have ID, slug, count, etc.
echo json_encode( get_term_by( 'name', $variation , 'pa_size') );

答案 1 :(得分:0)

您可以将产品放入一个数组中,并使用php end()函数选择最后一个,如下所示:

global $woocommerce;

//get cart items
$items = $woocommerce->cart->get_cart();

$ids = array();
foreach($items as $item => $values) { 
        $_product = $values['data']->post; 
        //push each id into array
        $ids[] = $_product->ID; 
} 

//get last product id
$last_product_id = end($ids);

//get product variation details
$variations = get_variation_data_from_variation_id( $last_product_id );

然后按以下方式定义get_variation_data_from_variation_id($item_id)

//function to get product variation
    function get_variation_data_from_variation_id( $item_id ) {
        $_product = new WC_Product_Variation( $item_id );
        $variation_data = $_product->get_variation_attributes();
        //return variation detail
        return woocommerce_get_formatted_variation( $variation_data, true ); 
    }

答案 2 :(得分:0)

这意味着您可能在创建购物车对象之前就已经对其进行了访问,例如,您需要将该代码放入'wp'挂钩中。

add_action('wp', function(){
   $product_id = end( WC()->cart->cart_contents)['product_id'];
});