Hinzufügen eines benutzerdefinierten Warenkorbpreises mit Ajax in WordPress

Ich versuche, einen benutzerdefinierten Preis mit der folgenden function (in functions.php) zum Warenkorb hinzuzufügen:

//Change cart item price function add_custom_price_callback( $cart_object ) { $custom_price = intval($_POST['p_m']); $target_product_id = intval($_POST['s_o_v']); foreach ( $cart_object->cart_contents as $value ) { //Single product if ( $value['product_id'] == $target_product_id ) { $value['data']->price = $custom_price; } //For variation if ( $value['variation_id'] == $target_product_id ) { $value['data']->price = $custom_price; } } die(); } 

add_action (‘wp_ajax_add_custom_price’, ‘add_custom_price_callback’); add_action (‘wp_ajax_nopriv_add_custom_price’, ‘add_custom_price_callback’); add_action (‘woocommerce_before_calculate_totals’, ‘add_custom_price_callback’); Wenn ich statische Werte für die Variablen verwende, funktioniert die function, aber ich muss die Variablen dynamisch mit einem Ajax-Aufruf setzen.

Ich habe Ajax in “functions.php” hinzugefügt mit:

 //jQuery / Ajax on site function site_scripts() { //jQ wp_enqueue_script( 'ww_site_script', get_stylesheet_directory_uri() . '/js/ww_site_script.js', array( 'jquery' ), null, true ); //Ajax wp_localize_script( 'ww_site_script', 'ajax_p', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); } add_action( 'wp_enqueue_scripts', 'site_scripts' ); 

Und hier ist mein Ajax-Anruf:

 //Send ajax values $( '.single_add_to_cart_button' ).click(function() { console.log(s_o_v); console.log(p_m); var data = { action: 'add_custom_price', p_m: p_m, s_o_v : s_o_v }; $.post( ajax_p.ajax_url, data, function(response) { console.log( response ); }, 'json'); }); 

Die “console.log (respons);” ruft die Werte ab, die in der function enthalten sind, aber der admin-ajax gibt 0 zurück. Wie sende ich die Werte an die function “add_custom_price_callback”?

Solutions Collecting From Web of "Hinzufügen eines benutzerdefinierten Warenkorbpreises mit Ajax in WordPress"

Versuchen Sie, Ihre add_custom_price_callback () wie folgt zu ändern. Ungetestet, sollte aber funktionieren.

 function add_custom_price_callback() { $custom_price = intval($_POST['p_m']); $target_product_id = intval($_POST['s_o_v']); foreach ( WC()->cart->get_cart() as $key=>$value ) { //Single product if ( $value['product_id'] == $target_product_id ) { $value['data']->set_price($custom_price); } //For variation if ( $value['variation_id'] == $target_product_id ) { $value['data']->set_price($custom_price); } } //to check if is work or not wp_send_json(array($value['data']->get_price($custom_price))); }