WooCommerce列出了已经添加到购物车中的单一产品的变体

时间:2018-09-03 作者:Himanshu Borah

我有带有“Seat”变体的Woocommerce产品。我希望在单一产品页面中实现以下目标:

检查购物车是否已包含任何变化。如果显示“是”,您已经选择了这些座位:(变体名称,已经在购物车中)。如果显示“否”,请添加变体“我有以下代码,但我不知道应该在哪里添加此代码

foreach( WC()->cart->get_cart() as $cart_item ){
    $variation_id = $cart_item[\'variation_id\'];
}
请帮忙!

1 个回复
最合适的回答,由SO网友:Mark Cicchetti 整理而成

步骤1将获取产品的父ID。

下一步是循环遍历购物车,并检查购物车中的每个产品是否是父产品的变体(将显示为$cart_item->product_id) 并将属性信息保存在另一个数组中。属性中存在一个问题,因为它随安装而变化,并且取决于产品的设置方式。例如:如果您有一个属性“color”,它将显示在中的购物车项目中$cart_item->variation->attribute_pa_color. 您需要在wp\\u postmeta表中查询数据库,以获得正确的元键。另一种选择是只保存购物车项目变体元素中的所有内容。

最后,循环浏览结果并显示它们。

现在至于把它放在哪里,从技术上讲,它进入了功能。主题的php文件。您可能应该使用child theme 这是另一个讨论。WooCommerce使用钩子来添加或扩展功能,您使用哪个钩子取决于您希望它显示在哪里。Business Bloomer有一个优秀的视觉挂钩指南post for the product page. 例如,如果要将此列表置于简短描述下,则需要在函数中使用此列表。php(我喜欢把这些放在顶部附近)。。。

add_action( \'woocommerce_before_single_product_summary\', \'products_in_cart\', 5 );

代码引用函数products_in_cart(). 这可以在函数中的任何位置进行。php(除了在另一个代码块内!)我通常把这些放在底部。。。

function products_in_cart() {
  $parent = get_the_id(); // the parent product
  $products_in_cart = array();
  $cart_items =  WC()->cart->get_cart();
  foreach( $cart_items as $cart_item ){
    if ($cart_item[\'product_id\'] == $parent) {
      $products_in_cart[] = $cart_item[\'variation\']; // possibly array(\'attribute_pa_color\'=>\'black\')
    }
  }
  if (count($products_in_cart) > 0) {
    echo(\'You have selected these seats already:<br>\');
    foreach($products_in_cart as $product) {
      foreach($product as $key=>$val) {
        echo($val.\'<br>\');
      }
    }
  }
}
免责声明:我正在按原样共享此代码。我刚刚做了一些类似的事情,所以它在理论上是可行的,但几乎肯定需要根据您的安装和需要进行调整。

结束