Pat*_*our 6 php wordpress product woocommerce product-variations
我正在建立一个电子商务网站。我在使用 WooCommerce Variable Product时遇到了一些问题。
\n“添加到购物车”按钮适用于简单产品,但不适用于可变产品。它给出了一个"Please choose product options\xe2\x80\xa6"通知。
我到处寻找并尝试了网上的一些建议,但没有一个起作用。所以我查看了 WooCommerce 源文件:class-wc-form-handler.php.
在函数中add_to_cart_handler_variable:
function add_to_cart_handler_variable( $product_id ) {\n $adding_to_cart = wc_get_product( $product_id );\n $variation_id = empty( $_REQUEST['variation_id'] ) ? '' : absint( $_REQUEST['variation_id'] );\n $quantity = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( $_REQUEST['quantity'] );\n $missing_attributes = array();\n $variations = array();\n $attributes = $adding_to_cart->get_attributes();\n $variation = wc_get_product( $variation_id );\n...\nif ( $missing_attributes ) {\n 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' );\n } elseif ( empty( $variation_id ) ) {\n wc_add_notice( __( 'Please choose product options…', 'woocommerce' ), 'error' );\n } else {\n // Add to cart validation\n $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity, $variation_id, $variations );\n\n if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations ) !== false ) {\n wc_add_to_cart_message( $product_id );\n return true;\n }\n }\n return false;\n}\nRun Code Online (Sandbox Code Playgroud)\n该错误被捕获在 elseif 子句中。
\n所以我尝试回显$variation_id、$variations、 和$variation。它们中都没有任何内容,因为当我 echo $variation_id: 时它不会输出任何内容。
如何解决该错误?
\n在商店页面上,您无法对可变产品使用“添加到购物车”按钮,因为您需要首先进入单个产品页面选择该可变产品的选项,然后再将其添加到购物车。
\n\n在可变产品页面上,在使用“添加到购物车”按钮之前,通常您会显示一些为可变产品选择的选项。如果你不这样做,你会收到错误消息\xe2\x80\xa6
所以此时:
如果此问题与您的主题相关,请联系主题的作者并打开支持线程或票证\xe2\x80\xa6
\n\n输出产品 ID 的产品变体:
\n\n要以编程方式获取可变产品 ID 的产品变体:
\n\n$product = wc_get_product( $product_id );\n$product_variations = $product->get_available_variations();\n\necho var_dump($product_variations); // Displaying the array\nRun Code Online (Sandbox Code Playgroud)\n\n然后获取第一个变体ID:
\n\n$product = wc_get_product( $product_id );\n$product_variations = $product->get_available_variations();\n\n$variation_product_id = $product_variations [0][\'variation_id\'];\necho $variation_product_id; // Displaying the variation ID\nRun Code Online (Sandbox Code Playgroud)\n\n或者获取此产品 ID 的所有变体 ID 的数组:
\n\n$product = wc_get_product( $product_id );\n$product_variations = $product->get_available_variations();\n\n$arr_variations_id = array();\nforeach ($product_variations as $variation) {\n $product_variation_id = $variation[\'variation_id\'];\n array_push( $arr_variations_id, $product_variation_id );\n}\n\necho var_dump($arr_variations_id); // Displaying the array of variations ID\nRun Code Online (Sandbox Code Playgroud)\n\n参考: 将商店页面中的“添加到购物车”按钮更改为“转到产品”
\n