В этом уроке хочу поделиться с вами очень интересным сниппетом, который позволяет добавить поле изменения количества товара прямо на страницу оформления заказа. Это например может быть полезно для интернет-магазинов без корзины.
Давайте взглянем на то, как это будет выглядеть сначала:
Ну хорошо, как же его теперь сделать? Ну вообще нам понадобится всего два хука:
woocommerce_checkout_cart_item_quantity
– при помощи этого хука мы выведем поле изменения количества рядом с названием товара.woocommerce_checkout_update_order_review
– этот хук уже будет динамически изменять общую стоимость заказа.Погнали, код:
add_filter( 'woocommerce_checkout_cart_item_quantity', 'true_add_qty_field', 25, 3 ); function true_add_qty_field( $product_quantity, $cart_item, $cart_item_key ) { // пропустим объект товара через фильтр, на всякий случай $product = apply_filters( 'woocommerce_cart_item_product', $cart_item[ 'data' ], $cart_item, $cart_item_key ); // если включена опция на продажу товара индивидуально, неплохо бы её учесть if( $product->is_sold_individually() ) { // ничего не делаем return $product_quantity; } // выводим поле изменения количества товара $product_quantity = woocommerce_quantity_input( array( 'input_name' => 'shipping_method_qty_' . $product->get_id(), 'input_value' => $cart_item[ 'quantity' ], 'max_value' => $product->get_max_purchase_quantity(), 'min_value' => '0', ), $product, false ); $product_quantity .= '<input type="hidden" name="product_key_' . $product->get_id() . '" value="' . $cart_item_key . '">'; return $product_quantity; } add_action( 'woocommerce_checkout_update_order_review', 'true_update_item_quantity_checkout' ); function true_update_item_quantity_checkout( $post_data ) { parse_str( $post_data, $post_data_array ); $updated_qty = false; foreach ( $post_data_array as $key => $value ) { if( 'shipping_method_qty_' === substr( $key, 0, 20 ) ) { $id = substr( $key, 20 ); WC()->cart->set_quantity( $post_data_array[ 'product_key_' . $id ], $post_data_array[ $key ], false ); $updated_qty = true; } } if ( $updated_qty ) { WC()->cart->calculate_totals(); } }
Несколько комментариев:
WC_Product
, о них можно подробнее почитать в этом гайде.Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Здравствуйте! Крутой у Вас сайт. Я тоже пробую в своем магазине делать улучшения.
Такой вопрос. Как Вы узнаете о наличии определенных хуков.
Вот того же woocommerce_checkout_cart_item_quantity .
Мне сейчас нужно сменить текст на странице оформления ы добавить апсейлы и/или кросселы в мини корзину
подробней на скринах
https://i.imgur.com/Mzlrqoo.png
https://i.imgur.com/ul37DMz.png
Вот как узнать какой там есть хук или фильтр?
Спасибо!
Здравствуйте!
Спасибо! Поиск по файлам