我正在建立一个电子商务网站。我在使用WooCommerce 可变产品时遇到了一些问题。
“添加到购物车”按钮适用于简单的产品,但不适用于可变产品。它会发出"Please choose product options…"
通知。
我到处寻找并在线尝试了几个建议,但都没有。所以我查看了WooCommerce源文件: class-wc-form-handler.php
。
在功能 add_to_cart_handler_variable
:
function add_to_cart_handler_variable( $product_id ) {
$adding_to_cart = wc_get_product( $product_id );
$variation_id = empty( $_REQUEST['variation_id'] ) ? '' : absint( $_REQUEST['variation_id'] );
$quantity = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( $_REQUEST['quantity'] );
$missing_attributes = array();
$variations = array();
$attributes = $adding_to_cart->get_attributes();
$variation = wc_get_product( $variation_id );
...
if ( $missing_attributes ) {
wc_add_notice( sprintf( _n( '%s is a required field', '%s are required fields', sizeof( $missing_attributes ), 'woocommerce' ), wc_format_list_of_items( $missing_attributes ) ), 'error' );
} elseif ( empty( $variation_id ) ) {
wc_add_notice( __( 'Please choose product options…', 'woocommerce' ), 'error' );
} else {
// Add to cart validation
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity, $variation_id, $variations );
if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations ) !== false ) {
wc_add_to_cart_message( $product_id );
return true;
}
}
return false;
}
错误发生在elseif子句中。
所以我试图回应$variation_id
,$variations
和$variation
。它们都没有任何内容,因为当我回显$variation_id
时:它不会输出任何内容。
有什么建议吗?
答案 0 :(得分:3)
在商店页面上,您不能对可变产品使用“添加到购物车”按钮,因为在将其添加到购物车之前,您需要先在单个产品页面上选择此变量产品的选项。
在可变产品页面上,在使用"添加到购物车"之前,通常您会为变量产品显示一些选项以选择。按钮。如果你不这样做,你会得到错误信息......
所以在这一点上:
如果此问题与您的主题相关,请与您主题的作者联系并打开支持主题或故障单...
针对产品ID的产品变更:
以编程方式获取变量产品ID的产品变体:
$product = wc_get_product( $product_id );
$product_variations = $product->get_available_variations();
echo var_dump($product_variations); // Displaying the array
然后获取第一个变体ID:
$product = wc_get_product( $product_id );
$product_variations = $product->get_available_variations();
$variation_product_id = $product_variations [0]['variation_id'];
echo $variation_product_id; // Displaying the variation ID
或者获取此产品ID的所有变体ID的数组:
$product = wc_get_product( $product_id );
$product_variations = $product->get_available_variations();
$arr_variations_id = array();
foreach ($product_variations as $variation) {
$product_variation_id = $variation['variation_id'];
array_push( $arr_variations_id, $product_variation_id );
}
echo var_dump($arr_variations_id); // Displaying the array of variations ID
参考:Change "Add to Cart" button to "Go to Product" in the Shop Page
答案 1 :(得分:0)
我遇到了同样的问题.....删除您的变体色板插件,问题将得到解决
答案 2 :(得分:0)
虽然我们所有人都有共同的样例,但错误(听起来有点怪异)与主题不兼容有关。要进行测试,只需切换到2020主题,然后订购即可。我建议您然后根据您的需要设置2020套间,并停止使用主题,在woocommerce更新推出时,开发人员会休息几天!禁用色板将无济于事,因为代码已经存在。祝你好运。
答案 3 :(得分:0)
遇到了同样的问题....停用了自动优化插件,问题就解决了。
此外,要知道要禁用哪个插件,您可以简单地加载页面或网站,检查元素或开发人员模式,然后检查控制台以查看错误来源,然后您可以将其与相关的插件,然后从您的 wp 仪表板禁用。
答案 4 :(得分:0)
以防万一其他人正在构建自定义主题并遇到此问题,变体未按预期添加到购物车中 - 您可能需要检查您的主题是否正在加载 /woocommerce/assets/js/frontend/add -to-cart-variation.min.js 脚本 - 将以下内容添加到您将脚本排入队列以手动添加它的任何位置:
wp_enqueue_script('wc-add-to-cart-variation');
这为我解决了这个问题。