WC_Form_Handler::add_to_cart_handler_variable() private WC 2.4.6
Handle adding variable products to the cart.
{} Это метод класса: WC_Form_Handler{}
Хуки из метода
Возвращает
true/false. success or not
Использование
$result = WC_Form_Handler::add_to_cart_handler_variable( $product_id );
- $product_id(число) (обязательный)
- Product ID to add to the cart.
Список изменений
С версии 2.4.6 | Введена. |
С версии 2.4.6 | Split from add_to_cart_action. |
Код WC_Form_Handler::add_to_cart_handler_variable() WC Form Handler::add to cart handler variable WC 4.9.2
private static function add_to_cart_handler_variable( $product_id ) {
$variation_id = empty( $_REQUEST['variation_id'] ) ? '' : absint( wp_unslash( $_REQUEST['variation_id'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$quantity = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( wp_unslash( $_REQUEST['quantity'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$variations = array();
$product = wc_get_product( $product_id );
foreach ( $_REQUEST as $key => $value ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( 'attribute_' !== substr( $key, 0, 10 ) ) {
continue;
}
$variations[ sanitize_title( wp_unslash( $key ) ) ] = wp_unslash( $value );
}
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity, $variation_id, $variations );
if ( ! $passed_validation ) {
return false;
}
// Prevent parent variable product from being added to cart.
if ( empty( $variation_id ) && $product && $product->is_type( 'variable' ) ) {
/* translators: 1: product link, 2: product name */
wc_add_notice( sprintf( __( 'Please choose product options by visiting <a href="%1$s" title="%2$s">%2$s</a>.', 'woocommerce' ), esc_url( get_permalink( $product_id ) ), esc_html( $product->get_name() ) ), 'error' );
return false;
}
if ( false !== WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations ) ) {
wc_add_to_cart_message( array( $product_id => $quantity ), true );
return true;
}
return false;
}