WordPress передает значение ajax на определенную страницу с помощью WordPress

Я хотел бы передать переменную на определенную страницу. Я нашел простой пример, объясняющий, как использовать ajax с wordpress.

JavaScript:

jQuery(document).ready(function($) { // We'll pass this variable to the PHP function example_ajax_request var fruit = 'Banana'; // This does the ajax request $.ajax({ url: ajaxurl, data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { // This outputs the result of the ajax request console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); }); 

Часть PHP для вставки в functions.php

 function example_ajax_request() { // The $_REQUEST contains all the data sent via ajax if ( isset($_REQUEST) ) { $fruit = $_REQUEST['fruit']; // Let's take the data that was sent and do something with it if ( $fruit == 'Banana' ) { $fruit = 'Apple'; } // Now we'll return it to the javascript function // Anything outputted will be returned in the response echo $fruit; // If you're debugging, it might be useful to see what was sent in the $_REQUEST // print_r($_REQUEST); } // Always die in functions echoing ajax content die(); } add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); 

К сожалению, я не могу передать переменную. Я проверил код и получил эту ошибку:

 Error: ajax_object is not defined 

Возможно, вы знаете другой способ получить тот же результат?

Вы очень близко, но есть кое-какие недостатки …

В моем комментарии я имею в виду, что вам нужно использовать его таким образом, используя 'ajax-script' в обоих:

 add_action('wp_enqueue_scripts', 'add_js_scripts'); add_js_scripts(){ wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/script.js', array('jquery'), '1.0', true ); wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } 

Изменен $_REQUEST до $_POST :

 function example_ajax_request() { // The $_REQUEST contains all the data sent via ajax if ( isset($_POST) ) { $fruit = $_POST['fruit']; // Let's take the data that was sent and do something with it if ( $fruit == 'Banana' ) { $fruit = 'Apple'; } // Now we'll return it to the javascript function // Anything outputted will be returned in the response echo $fruit; // If you're debugging, it might be useful to see what was sent in the $_POST // print_r($_POST); } // Always die in functions echoing ajax content die(); } 

Добавлен add_action( 'wp_ajax_nopriv_ … ) :

 add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' ); // <= this one add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); 

Для файла сценария jQuery script.js есть две важные недостающие вещи:

 jQuery(document).ready(function($) { /* We'll pass this variable to the PHP function example_ajax_request */ var fruit = 'Banana'; /* This does the ajax request */ $.ajax({ url: ajax_object.ajaxurl, /* <====== missing here */ type : 'post', /* <========== and missing here */ data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { /* This outputs the result of the ajax request */ console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); }); 

Это должно работать сейчас …

Рекомендации:

  • Использование AJAX с PHP на вашем сайте WordPress без плагина

  • Как использовать Ajax с вашим плагином WordPress или Theme?

Вы используете wp_localize_script неправильно. В PHP-коде удалите строку wp_localize_script .

При желании вы можете (и должны) добавить следующие

 // this line is for users who are not logged in add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' ); 

Все правильно, за исключением того, что вам нужно добавить ajax_object.ajax_url, а не ajaxurl в url: параметр функции $ .ajax as

 jQuery(document).ready(function($) { // We'll pass this variable to the PHP function example_ajax_request var fruit = 'Banana'; // This does the ajax request $.ajax({ url: **ajax_object.ajax_url**, data: { 'action':'example_ajax_request', 'fruit' : fruit }, success:function(data) { // This outputs the result of the ajax request console.log(data); }, error: function(errorThrown){ console.log(errorThrown); } }); }); 

скопируйте и вставьте выше скрипта вместо функции $ .ajax. Если вы хотите увидеть, что такое ajax_object.ajax_url, тогда предупредите его о недействительности вашего кода, и он предупредит путь к файлу ajax администратора, который необходим для использования ajax в wordpress