Есть передача через ajax следующим образом
<srcipt>
$('body').on('submit', '[data-name=add_to_cart]', function(e) {
var p_m = 333;
var s_o_v = 994;
$.ajax({
url: '<?php echo admin_url('admin-ajax.php') ?>',
type: 'POST',
data: 'action=add_custom_price&p_m='+p_m+'&s_o_v='+s_o_v,
dataType: 'json',
success: function( response ) {
alert( response );
}
});
});
</script>
в functions.php эти данные обрабатываются так
<?php
add_action ('wp_ajax_' . $_REQUEST['action'], 'add_custom_price');
add_action ('wp_ajax_nopriv_' . $_REQUEST['action'], 'add_custom_price');
add_action ('woocommerce_before_calculate_totals', 'add_custom_price');
function add_custom_price( $cart_object ) {
$cena = trim(iconv_substr(strip_tags($_REQUEST['p_m']), 0, 50));
$custom_price = $cena > 0 ? $cena : 2;
$target_product_id = $_REQUEST['s_o_v'] > 0 ? $_POST['s_o_v'] : 0;
foreach ( $cart_object->cart_contents as $key => $value ) {
//Single product
if ( $value['product_id'] == 994 ) {
$value['data']->set_price($custom_price);
}
}
echo $custom_price;
}
?>
Почему то в эту строку попадает 2 вместо $cena
<?php
$value['data']->set_price($custom_price);
?>
А возвращает в alert то что было передано через ajax, то есть 3330 (почему то с нулем в конце)
<?php
echo $cena;
?>