Woocommerce Is_Purchasable导致ajax错误

时间:2016-06-20 21:29:43

标签: php ajax wordpress woocommerce

我正在使用下面的代码来修改WooCommerce Is_Purchasable选项,这样,如果项目X被添加到购物车,则项目Y是可购买的。

但是当尝试将项目Y添加到购物车时,它会出现ajax错误。

以下是代码:

function aelia_get_cart_contents() {
  $cart_contents = array();
  /**
   * Load the cart object. This defaults to the persistant cart if null.
   */

  $cart = WC()->session->get( 'cart', null );


  if ( is_null( $cart ) && ( $saved_cart = get_user_meta( get_current_user_id(), '_woocommerce_persistent_cart', true ) ) ) {
    $cart = $saved_cart['cart'];
  } elseif ( is_null( $cart ) ) {
    $cart = array();
  }

  if ( is_array( $cart ) ) {
    foreach ( $cart as $key => $values ) {
      $_product = wc_get_product( $values['variation_id'] ? $values['variation_id'] : $values['product_id'] );

      if ( ! empty( $_product ) && $_product->exists() && $values['quantity'] > 0 ) {
        if ( $_product->is_purchasable() ) {
          // Put session data into array. Run through filter so other plugins can load their own session data
          $session_data = array_merge( $values, array( 'data' => $_product ) );
          $cart_contents[ $key ] = apply_filters( 'woocommerce_get_cart_item_from_session', $session_data, $values, $key );
        }
      }
    }
  }
  return $cart_contents;
}

// Step 1 - Keep track of cart contents
add_action('wp_loaded', function() {
  // If there is no session, then we don't have a cart and we should not take
  // any action
  if(!is_object(WC()->session)) {
    return;
  }

  // Product Y
  global $y_cart_items;
  $y_cart_items = 2986;

  //Product X
  global $x_cart_items;
  $x_cart_items = array(
    '297'
  );

  // Step 2
  add_filter('woocommerce_is_purchasable', function($is_purchasable, $product) {

  global $y_cart_items;
    global $x_cart_items;
    if( $product->id == $y_cart_items ) {
        // make it false
        $is_purchasable = false;
        // get the cart items object
        foreach ( aelia_get_cart_contents() as $key => $item ) {
            // do your condition
            if( in_array( $item['product_id'], $x_cart_items ) ) {
                // Eligible product found on the cart 
                $is_purchasable = true;
                break;
            }
        }   
    }
    return $is_purchasable;
  }, 10, 2);
}, 10);

// Step 3 - Explain customers why they can't add some products to the cart
add_filter('woocommerce_get_price_html', function($price_html, $product) {
  if(!$product->is_purchasable() && is_product()) {
    $price_html .= '<p>' . __('Add Product X to be able to purchase Product Y.', 'woocommerce') . '</p>';
  }
  return $price_html;
}, 10, 2);

我该如何解决这个问题?谢谢。

0 个答案:

没有答案