@midas34

Как программно можно пересчитать стоимость товара и корзины?

Есть стандартная стоимость товара, имеется несколько переменных у товара
Диапазон От и До и к этому диапазону соответствующая цена
rangeby1 Стоимость от
rangeto1 Стоимость до
spec_price1 Цена
rangeby2 Стоимость от
rangeto2 Стоимость до
spec_price2 Цена
rangeby Стоимость свыше
spec_price Цена
Подскажите пожалуйста как программно без плагина сделать пересчёт стоимости товара и корзины
  • Вопрос задан
  • 15 просмотров
Пригласить эксперта
Ответы на вопрос 1
cooder
@cooder
JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
Вам нужно добавить ваши переменные в товар. То есть, в карточке товара у вас должны появиться новые поля, куда вы будете заносить и сохранять значения переменных.
Для этого вам нужно реализовать три "хука" - первый на "display" полей, второй на "save" данных пеhременных, третий - перерасчет цены в корзине.
Подробнее по "кастомным" полям в корзине Woo - https://woocommerce.github.io/code-reference/files...

1) Пример, как добавить "кастомный" input в товар в "базовой комплектации":

add_action('woocommerce_product_options_general_product_data', 'your_function_for_display_custom_meta_data');
function your_function_for_display_custom_meta_data() {	
	woocommerce_wp_text_input(
        array(
            'id' => 'rangeby1',
            'placeholder' => 'Текст плейсхолдера',
            'label' => 'Текст label'
        ));
// подобным образом, добавляете все переменные, как инпуты...
}


2) Второй "хук" - для сохранения данных, которые вводятся в поля:

add_action('woocommerce_process_product_meta', 'your_function_for_save_custom_meta_data');
function your_function_for_save_custom_meta_data( $post_id ){
	$rangeby1 = $_POST['rangeby1'];
	update_post_meta($post_id, 'rangeby1', esc_html($rangeby1));
// подобным образом, добавляете сохранение для всех полей...
}


3) Выводите переменные в корзине:

add_action( 'woocommerce_before_calculate_totals', 'your_function_for_calculate_cart_totals', 10, 1 );
function your_function_for_calculate_cart_totals( $cart ){
        // перебор в цикле всех товаров в корзине, примерно так:
	foreach ( $cart->get_cart() as $cart_item ) {
                // получаете значения переменных:
                $rangeby1 = get_post_meta( $cart_item['data']->get_ID(), 'rangeby1', true );
		// прописываете логику перерасчета цен... тут уже всё индивидуально...
	}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы