10

WordPressプラグインWooCommerceのカートに可変商品を追加しようとしています。

これまでのところ、次のような単一/単純な製品を追加することができました。

$woocommerce->cart->add_to_cart( [product_id], [quantity] );

ただし、WC_Classで関数のシグネチャを確認します。

function add_to_cart( $product_id, $quantity = 1, $variation_id = '', $variation = '', $cart_item_data = array() ) {

関数がvariation_idの入力を許可していることがはっきりとわかります。

私は次の行に沿ってnullと整数のすべての組み合わせを試しました:

$woocommerce->cart->add_to_cart( 24, 1, 28, null, null ); 

など、無駄になります。

私はまた、WooCommerce自身の製品ページによって実行された投稿イベントを再現しようとする私自身のハッキーなアプローチを試しましたが、これも運が悪かったです。

<a id="buy_v" href="#">Buy Variable Product !</a>    
<script>    
   $('#buy_v').click(function(e) {
      e.preventDefault();
      addToCartV(24,26,'Red',1);
      return false;
   });    
   function addToCartV(p_id, v_id, c, q) {    
    $.ajax({
      type: 'POST',
      url: '/wp/?product=tee1&add-to-cart=variation&product_id='+p_id,
      data: { 'attribute_colour': c,
              'variation_id':  v_id,
              'quantity':  q,
              'product_id':  p_id},
      success: function(response, textStatus, jqXHR){
            // log a message to the console
            console.log("It worked!");
        }/*,
      dataType: 'JSON'*/
    });    
   }   
</script>

誰かが私がどこで間違っているのか提案できますか?ありがとう。

4

2 に答える 2

14

上記の例はどちらも実際には正常に機能しますが、WooCommerceのカートでは正しく表示されません。

それらを正しく表示するには、WooCommerce自身のカートのバリエーションを表すように見える4番目のパラメーターの配列を渡します。

$arr = array();
$arr['Color'] = 'Green';
$woocommerce->cart->add_to_cart( 24, 1, 28, $arr, null ); 
于 2012-05-29T16:04:27.963 に答える
3

同様のことを試みている他の人のために、ここに私のアプローチがあります。

次の内容を含むajax経由で呼び出されるスクリプトを作成しました。

<?php
require_once("../../../wp-blog-header.php");
header("HTTP/1.1 200 OK");
global $woocommerce;

$quantity       = (isset($_REQUEST['qty'])) ? (int) $_REQUEST['qty'] : 1;
$product_id     = (int) apply_filters('woocommerce_add_to_cart_product_id', $_REQUEST['pid']);   
$vid            = (int) apply_filters('woocommerce_add_to_cart_product_id', $_REQUEST['vid']);   

if ($vid > 0) $woocommerce->cart->add_to_cart( $product_id, $quantity, $vid );         
else $woocommerce->cart->add_to_cart( $product_id, $quantity );    

これにより、商品のバリエーションがカートに正常に追加されます

于 2012-09-05T13:41:30.227 に答える