Stack Overflow на русском Asked by Stanislau Zenkin on November 29, 2021
На странице checkout есть дополнительные поля, которые влияют на конечную стоимость товара.
Я бы хотел динамически изменять общую стоимость в зависимоси от заполненных полей.
Если использовать ниже приведённый хук, то работает, но не совсем так как бы хотелось.
add_action('woocommerce_before_calculate_totals', 'set_custom_price', 50);
function set_custom_price() {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$getcart = WC()->cart->get_cart();
foreach ( $getcart as $cart_item_key => $cart_item ) {
$cart_item['data']->set_price( $price );
}
}
Есть ли способ динамически менять стоимость используя AJAX?
Пробовал так:
$('#my-btn').click(function(){
$.ajax({
url: 'https://colis.by/wp-admin/admin-ajax.php',
type: 'POST',
data: {
action: 'my-action',
sum: '120'
},
beforeSend: function( xhr ) {
$('#my-btn').text('Загрузка, 5 сек...');
},
success: function( data ) {
$('#my-btn').text('Отправить');
console.log( data );
$(document.body).trigger("update-order-review");
}
});
});
add_action( 'wp_ajax_my-action', 'test_function' );
add_action( 'wp_ajax_nopriv_my-action', 'test_function' );
function test_function(){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$sum = $_POST['sum'];
$getcart = WC()->cart->get_cart();
foreach ( $getcart as $cart_item_key => $cart_item ) {
$cart_item['data']->set_price( $sum );
print_r($cart_item['data']);
}
die;
}
В правильном ли направлении я двигаюсь? Есть ли у кого какие-нибудь идеи как мне получить ожидаемый результат?
Решил свою проблему добавлением переменной в сессию
add_action( 'wp_ajax_my-action', 'test_function' );
add_action( 'wp_ajax_nopriv_my-action', 'test_function' );
function test_function(){
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
$sum = $_POST['sum'];
WC()->session->set( 'fee_sum', $sum );
die;
}
add_action('woocommerce_before_calculate_totals', 'set_custom_fee', 50);
function set_custom_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
$sum = WC()->session->get( 'fee_sum' );
if ( $sum && $sum > 0) {
$cart->add_fee( 'Дополнительная стоимость', $sum );
}
}
Answered by Stanislau Zenkin on November 29, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP