【问题标题】:Also change WooCommerce Minicart item price based on product custom field还根据产品自定义字段更改 WooCommerce Minicart 项目价格
【发布时间】:2020-08-23 18:09:17
【问题描述】:

基于 Allow customer to set the product price (giftcard) and add to cart if sum is minimum 100 in WooCommerce,它回答了我最初的问题 - 我还有一个关于 WooCommerce 迷你购物车的小问题。

产品价格不会根据客户使用礼品卡字段提交的内容进行相应更新。所以我有两种不同的解决方案,但都失败了。

这是我尝试过的:

add_filter('woocommerce_widget_cart_item_quantity', 'custom_wc_widget_cart_item_quantity', 10, 3 );
function custom_wc_widget_cart_item_quantity( $cart, $cart_item, $cart_item_key ) {

    foreach ( $cart->get_cart() as $cart_item ) {

        if ( isset ( $cart_item['giftcard_product_price'] ) ) {

        $cart_item['data']->set_price( $cart_item['giftcard_product_price'] );

        return sprintf( '<span class="quantity">%s &times; <span class="woocommerce-Price-amount amount">%s <span class="woocommerce-Price-currencySymbol">%s</span></span></span>', $cart_item['quantity'], $cart_item['giftcard_product_price'] );
        }
    }
}

它不起作用:Minicart 变为空白。然后我也尝试了:

add_filter('woocommerce_cart_item_price','modify_cart_product_price',10,3);
function modify_cart_product_price( $price, $cart_item, $cart_item_key){
    $price = $cart_item['data']->set_price($cart_item['giftcard_product_price']);
    return $price;
}

如果能得到任何帮助,我将不胜感激。

【问题讨论】:

    标签: php wordpress woocommerce custom-fields minicart


    【解决方案1】:

    这样使用的正确钩子是woocommerce_cart_item_price

    add_filter( 'woocommerce_cart_item_price', 'giftcard_cart_item_price', 10, 3 );
    function giftcard_cart_item_price( $price_html, $cart_item, $cart_item_key ) {
        $giftcard_key = 'giftcard_product_price';
    
        if( isset( $cart_item[$giftcard_key] ) ) {
            $args = array( 'price' => floatval( $cart_item[$giftcard_key] ) );
    
            if ( WC()->cart->display_prices_including_tax() ) {
                $product_price = wc_get_price_including_tax( $cart_item['data'], $args );
            } else {
                $product_price = wc_get_price_excluding_tax( $cart_item['data'], $args );
            }
            return wc_price( $product_price );
        }
        return $price_html;
    }
    

    现在自定义价格将正确显示在迷你购物车中...

    【讨论】:

      【解决方案2】:

      可变产品篮子中免费价格的完整变体。

      /**
       * Initialize Session cart
       */
      add_action('init', 'init_cart_session', 1);
      function init_cart_session() {
          if (!session_id()) {
              session_start();
          }
          if (!isset($_SESSION['cart'])) {
              $_SESSION['cart'] = [];
          }
      }
      
      /**
       * Custom size correct
       */
      add_action('woocommerce_before_calculate_totals', 'woo_size_correct', 10, 6);
      function woo_size_correct() {
          global $woocommerce;
      
          if (isset($_POST['attribute_pa_size']) && $_POST['attribute_pa_size'] == 'custom') 
      {
              $_SESSION['cart'][$_POST['variation_id']] = $_POST['custom'];
          }
      
          foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
              if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
                  $cart_item['data']->set_price($_SESSION['cart'][$cart_item['data']->variation_id]);
              }
          }
      }
      add_filter('woocommerce_cart_item_price', 'woo_size_mini_cart_correct', 10, 6);
      function woo_size_mini_cart_correct($price_html, $cart_item, $cart_item_key) {
          global $woocommerce;
      
          if (array_key_exists($cart_item['data']->variation_id, $_SESSION['cart'])) {
              $args = array('price' => floatval($_SESSION['cart'][$cart_item['data']->variation_id]));
      
              if (WC()->cart->display_prices_including_tax()) {
                  $product_price = wc_get_price_including_tax($cart_item['data'], $args);
              } else {
                  $product_price = wc_get_price_excluding_tax($cart_item['data'], $args);
              }
              return wc_price($product_price);
          }
          return $price_html;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 2021-01-04
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 2018-11-01
        • 2021-06-02
        相关资源
        最近更新 更多