Как вызвать ajax в wordpress

Мой вывод вызова ajax всегда показывает 0, поскольку вывод не знает почему

В functions.php у меня есть этот код

  function get_data () {$ abc = '1';  $ result = $ wpdb-> get_results ("ВЫБРАТЬ * ОТ". $ wpdb-> options. "WHERE option_name LIKE '_transient_%'");  echo $ result; //возвращаем это значение, но все равно показывает 0 wp_die ();} add_action ('wp_ajax_nopriv_get_data', 'get_data'); add_action ('wp_ajax_get_data', 'get_data');  

И мой вызов ajax находится в javascript

  $ ('body'). on ("click", ".re-reset-btn", function (e) {var panel  = $ ('# re-compare-bar'); $ .ajax ({type: "GET", dataType: "json", url: "/wp-admin/admin-ajax.php", data: {action:  "get_data"}, success: function (response) {alert ("Ваш голос не может быть добавлен"); alert (response);}}); $ ("# re-compare-bar-tabs div"). remove (  ); $ ('. re-compare-icon-toggle .re-compare-notice'). text (0);});  

Я делаю вызов ajax в wordpress без использования плагина, но не получаю то, что я передаю. Даже если я выведу $ abc, он все равно показывает 0.


В бэкэнде есть глобальная переменная ajaxurl, определенная самим WordPress .

Эта переменная не создается WP во внешнем интерфейсе. Это означает, что если вы хотите использовать вызовы AJAX во внешнем интерфейсе, вы должны сами определить такую ​​переменную.

Хороший способ сделать это — использовать wp_localize_script.

Предположим, ваши вызовы AJAX находятся в файле my-ajax-script.js, затем добавьте wp_localize_script для этого файла JS следующим образом:

  function my_enqueue () {wp_enqueue_script ('ajax  -script ', get_template_directory_uri ().'/js/my-ajax-script.js ', array (' jquery '));  wp_localize_script ('ajax-script', 'my_ajax_object', array ('ajax_url' => admin_url ('admin-ajax.php')));  } add_action ('wp_enqueue_scripts', 'my_enqueue');  

После локализации вашего JS-файла вы можете использовать объект my_ajax_object в своем JS-файле:

   jQuery.ajax ({type: "post", dataType: "json", url: my_ajax_object.ajax_url, data: formData, success: function (msg) {console.log (msg);}});   

13

Собственно, WordPress поставляется с удобной функцией для доступа к admin-ajax.

  • В wp-admin вам не нужно ничего делать, библиотека js всегда загружается
  • В front-end вам нужно поставить в очередь скрипт wp-util , например это:

      add_action ('wp_enqueue_scripts', 'my_enqueue_function'); function my_enqueue_function () {//Вариант 1. Вручную поставить библиотеку wp-util в очередь. wp_enqueue_script ('wp-util'); //Вариант 2: Сделайте wp-util зависимостью вашего скрипта (обычно лучше).  wp_enqueue_script ('my-script', 'my-script.js', ['wp-util']);}  

Файл wp- Сценарий util содержит объект wp.ajax , который вы можете использовать для выполнения запросов ajax:

  wp.ajax.post (действие, данные)  .done (okCallback) .fail (errCallback)  

Ваш пример:

  wp.ajax.post ("get_data",  {}) .done (function (response) {alert ("Ваш голос не может быть добавлен"); alert (response);});  

Конечно, вам все еще нужно для создания хуков wp_ajax_ * в вашем PHP-скрипте.

  add_action ('wp_ajax_nopriv_get_data', 'my_ajax_handler'); add_action ('wp_ajax_get_data'  , 'my_ajax_handler'); function my_ajax_handler () {wp_send_json_success ('Это работает');}  

Совет:

Для ответов Ajax WordPress предоставляет две функции:

wp_send_json_success ($ my_data) и wp_send_json_error ($ my_data) — обе функции возвращают объект JSON и d мгновенно завершить запрос (т.е. они exit; )

Улучшите этот ответ
ответил 4 дек. ’19 в 17:02
  • Мой главный вопрос: допустим, я опубликовал публиковать данные, такие как электронное письмо от jquery ajax, тогда можно сказать $ email = $ _POST ['email'] или WordPress имеет некоторые другие предопределенные методы — Karue Benson Karue 6 июня ’20 at 11:16
добавить комментарий |

На самом деле WordPress поставляется с удобной функцией для доступа к admin-ajax.

  • В wp-admin ничего делать не нужно, библиотека js всегда загружается
  • В front- end вам нужно поставить в очередь скрипт wp-util , например:

      add_action ('wp_enqueue_scripts', 'my_enqueue_function'  ); function my_enqueue_function () {//Вариант 1. Вручную поставить библиотеку wp-util в очередь.  wp_enqueue_script ('wp-util'); //Вариант 2: Сделайте wp-util зависимостью вашего скрипта (обычно лучше).  wp_enqueue_script ('my-script', 'my-script.js', ['wp-util']);}  

Файл wp- Сценарий util содержит объект wp.ajax , который вы можете использовать для выполнения запросов ajax:

  wp.ajax.post (действие, данные)  .done (okCallback) .fail (errCallback)  

Ваш пример:

  wp.ajax.post ("get_data",  {}). done (function (response) {alert ("Ваш голос не может быть добавлен"); alert (response);});  

Конечно, вам все равно нужно создать wp_ajax_ * в вашем PHP-скрипте.

  add_action ('wp_ajax_nopriv_get_data', 'my_ajax_handler'); add_action ('wp_ajax_get_data', 'my_ajax_handler'  ); function my_ajax_handler () {wp_send_json_success ('Это работает');}  

Совет:

Для Ответы Ajax WordPress предоставляет две функции:

wp_send_json_success ($ my_data) и wp_send_json_error ($ my_data) — обе функции возвращают JSON и немедленно завершают запрос (т.е. они exit; )


3
              



functions.php

  wp_enqueue_script ('jquery'); function addCustomer () {global $ wpdb;  $ name = $ _POST ['имя'];  $ phone = $ _POST ['телефон'];  $ email = $ _POST ['электронная почта'];  $ адрес = $ _POST ['адрес'];  if ($ wpdb-> insert ('customers', array ('name' => $ name, 'email' => $ email, 'address' => $ address, 'phone' => $ phone)) ===  false) {echo 'Ошибка';  } else {echo "Клиент". $ name.  "'успешно добавлен, идентификатор строки:". $ wpdb-> insert_id;  } die ();} add_action ('wp_ajax_addCustomer', 'addCustomer'); add_action ('wp_ajax_nopriv_addCustomer', 'addCustomer');  

javascript

   jQuery ('# newCustomerForm'). submit (ajaxSubmit); function ajaxSubmit () {var newCustomerForm = jQuery (this) .serialize ();  jQuery.ajax ({type: "POST", url: "/wp-admin/admin-ajax.php", data: newCustomerForm, success: function (data) {jQuery ("# ​​feedback"). html (данные);  }});  return false;}   

Улучшите этот ответ
отредактировал 4 марта ’20 в 18:52
Talk Nerdy To Me
40722 серебряных знака1313 бронзовых знаков
ответил 29 июля ’19 в 07: 29
добавить комментарий |

               



functions.php

  wp_enqueue_script ('jquery'  ); функция addCustomer () {global $ wpdb;  $ name = $ _POST ['имя'];  $ phone = $ _POST ['телефон'];  $ email = $ _POST ['электронная почта'];  $ адрес = $ _POST ['адрес'];  if ($ wpdb-> insert ('customers', array ('name' => $ name, 'email' => $ email, 'address' => $ address, 'phone' => $ phone)) ===  false) {echo 'Ошибка';  } else {echo "Клиент". $ name.  "'успешно добавлен, идентификатор строки:". $ wpdb-> insert_id;  } die ();} add_action ('wp_ajax_addCustomer', 'addCustomer'); add_action ('wp_ajax_nopriv_addCustomer', 'addCustomer');  

javascript

   jQuery ('# newCustomerForm'). submit (ajaxSubmit); function ajaxSubmit () {var newCustomerForm = jQuery (this) .serialize ();  jQuery.ajax ({тип: "POST", url: "/wp-admin/admin-ajax.php", data: newCustomerForm, success: function (data) {jQuery ("# ​​feedback"). html (data);  }});  return false;}   

3

У меня была такая же проблема. Я был новичком в WordPress. Поэтому я объясняю здесь, чтобы каждый новый ученик мог понять, как ajax вызывает в WordPress.

Сначала создайте функцию в файле function.php, который находится в папке wp-content/theme/selected_theme. Здесь selected_theme может быть названием вашей темы.

В приведенном выше вопросе создается функция с именем get_data () ;

  function get_data () {echo "test";  wp_die (); //умереть();  } add_action ('wp_ajax_nopriv_get_data', 'get_data'); add_action ('wp_ajax_get_data', 'get_data');  

в двух приведенных выше строках

  1. Метод add_action используется для реализации ловушки. Здесь я передаю два параметра, первый — это wp_ajax_nopriv_get_data . Здесь вы можете заменить get_data на свой выбор. а параметром раздела является get_data, который представляет собой имя функции, которую вы хотите вызвать.
  2. Во втором add_action я передаю два параметра, первый — это wp_ajax_get_data . Здесь вы можете заменить get_data на свой выбор. а параметр раздела — get_data, который является именем функции, которую вы хотите вызвать.

Здесь wp_ajax_nopriv вызывает, если пользователь не вошел в систему, и wp_ajax вызывается, когда пользователь входит в систему. .

  jQuery.ajax ({type: "post", dataType: "json", url: "/wp-admin/admin-ajax.php",//this  - это файл wordpress ajax, который уже доступен в данных wordpress: {action: 'get_data'//это значение является первым параметром add_action, id: 4}, success: function (msg) {console.log (msg);}})  ;  

Улучшите этот ответ
ответил 22 июня ’20 в 20:05
добавить комментарий |

У меня была такая же проблема. Я был новичком в WordPress. Поэтому я объясняю здесь, чтобы каждый новый ученик мог понять, как ajax вызывает в WordPress.

Сначала создайте функцию в файле function.php, который находится в папке wp-content/theme/selected_theme . Здесь selected_theme может быть названием вашей темы.

В приведенном выше вопросе создается функция с именем get_data () ;

  function get_data () {echo "test";  wp_die (); //умереть();  } add_action ('wp_ajax_nopriv_get_data', 'get_data'); add_action ('wp_ajax_get_data', 'get_data');  

в двух приведенных выше строках

  1. Метод add_action используется для реализации ловушки. Здесь я передаю два параметра, первый — это wp_ajax_nopriv_get_data . Здесь вы можете заменить get_data на свой выбор. а параметром раздела является get_data, который является именем функции, которую вы хотите вызвать.
  2. Во втором add_action я передаю два параметра, первый — это wp_ajax_get_data . Здесь вы можете заменить get_data на свой выбор. а параметр раздела — get_data, который является именем функции, которую вы хотите вызвать.

Здесь wp_ajax_nopriv вызывает, если пользователь не вошел в систему, и wp_ajax вызывается, когда пользователь вошел в систему.

  jQuery.  ajax ({type: "post", dataType: "json", url: "/wp-admin/admin-ajax.php",//это файл ajax wordpress, который уже доступен в данных wordpress: {action: 'get_data  '//это значение является первым параметром add_action, id: 4}, success: function (msg) {console.log (msg);}});  

2

Добавьте admin-ajax.php с помощью admin_url ('admin-ajax.php');

   $ ('body'). on  ("клик", ".re-reset-btn", function (e) {var panel = $ ('# re-compare-bar'); $ .ajax ({type: "POST", dataType: "json"  , url: "", data: {action: "get_data"}, success: function (response) {alert ("Ваш голос не может быть добавлен"  ); alert (ответ  );  }});  $ ("# re-compare-bar-tabs div"). remove ();  $ ('. повторно сравнить-значок-переключить. повторно-сравнить-уведомление'). текст (0);  });   

Улучшить этот ответ
отредактировал 4 марта ’20 в 17:35
Talk Nerdy To Me
40722 серебряных знака1313 бронзовых знаков
ответил 22 апр.
  • Этот код находится внутри файла javascript ……. поэтому он не работает php echo admin_url (‘admin-ajax.php’); ?> — smarttechy 22 апр. ’17 в 10:09
  • вы можете поместить свой код в файл footer.php перед php wp_footer (); ?>. — Шитал Маракана 22 апр. ’17 в 10:11
добавить комментарий |

Добавьте admin-ajax.php с помощью admin_url ('admin-ajax .php ');

   $ (' body '). on ("click", ".re-  reset-btn ", function (e) {var panel = $ ('# re-compare-bar'); $ .ajax ({type:" POST ", dataType:" json ", url:"  ", data: {action:" get_data "}, success: function (response) {alert (" Ваш голос не может быть добавлен "); alert (response);}}  ); $ ("# re-compare-bar-tabs div"). remove (); $ ('. re-compare-icon-toggle .re-compare-notice'). текст (0);  });   

0

Если вы получаете 0 в ответе, это означает, что ваш вызов ajax работает правильно, но вы не определили $ wpdb как глобальную переменную в своей функции get_data. Проверьте журнал ошибок, вы должны увидеть там ошибку. Попробуйте:

  function get_data () {global $ wpdb;  $ abc = '1';  $ result = $ wpdb-> get_results ("ВЫБРАТЬ * ОТ". $ wpdb-> options. "WHERE option_name LIKE '_transient_%'");  echo $ result; //возвращаем это значение, но все равно показывает 0 wp_die ();}  

Улучшите этот ответ
отредактировано 4 марта ’20 в 19:44
Talk Nerdy To Me
40722 серебряных знака1313 бронзовых знаков
ответил апр 22 ’17, в 10:17
добавить комментарий |

Если в ответе вы получаете 0 , это означает, что ваш вызов ajax работает правильно, но , вы не определили $ wpdb как глобальную переменную в своей функции get_data. Проверьте журнал ошибок, вы должны увидеть там ошибку. Попробуйте:

  function get_data () {global $ wpdb;  $ abc = '1';  $ result = $ wpdb-> get_results ("ВЫБРАТЬ * ОТ". $ wpdb-> options. "WHERE option_name LIKE '_transient_%'");  echo $ result; //возвращаем это значение, но все равно показывает 0 wp_die ();}  

0

Шаг 1: Добавьте файл ajax ‘wp_enqueue_script’ в файл функции, где вы должны добавить другие файлы ‘wp_enqueue_script’ или ‘wp_enqueue_style’

  wp_enqueue_script ('ajax-script', get_template_directory_uri (). '/js/my-ajax- script.js', array ('jquery'));  wp_localize_script ('ajax-script', 'my_ajax_object', array ('ajax_url' => admin_url ('admin-ajax.php')));  

Шаг 2: Теперь вы необходимо создать функцию, на которую вы хотите получить ответ, используя ajaxe.g ниже

  add_action ('wp_footer', 'add_ajaxex_in_footer');  function add_ajaxex_in_footer () {?>  jQuery ('# sbmtbtn'). click (function () {jQuery.ajax ({type: "POST", url: my_ajax_object.ajax_url, data:  {действие: 'my_special_ajax_call_enroll_cours'}, успех: функция (res) {console. журнал (res);  }});  });   php}  

Шаг 3: Теперь вам нужно создать функцию, в которой вы должны написать запрос,

  add_action ('wp_ajax_my_special_ajax_call_enroll_cours', 'enroll_cours'); add_action ('wp_ajax_nopriv_my_special_ajax_call_enroll_cours', 'enroll_cours');  function enroll_cours () {echo "Здесь вы можете написать запрос или что-нибудь еще";  } exit;}  

=> Если вы хотите запустить запрос ajax после кнопки onClick, просто передайте идентификатор кнопки

    

Улучшите этот ответ
ответил 12 октября ’20 в 14:16
добавить комментарий |

Шаг 1: Добавьте файл ajax ‘wp_enqueue_script’ в файл функции, где вы должны добавить другие файлы ‘wp_enqueue_script’ или ‘wp_enqueue_style’

  wp_enqueue_script ('ajax-script', get_template_directory_uri (). '/js/my-ajax- script.js', array ('jquery'));  wp_localize_script ('ajax-script', 'my_ajax_object', array ('ajax_url' => admin_url ('admin-ajax.php')));  

Шаг 2: Теперь вы необходимо создать функцию, на которую вы хотите получить ответ, используя ajaxe.g ниже

  add_action ('wp_footer', 'add_ajaxex_in_footer');  function add_ajaxex_in_footer () {?>  jQuery ('# sbmtbtn'). click (function () {jQuery.ajax ({type: "POST", url: my_ajax_object.ajax_url, data:  {action: 'my_special_ajax_call_enroll_cours'}, success: function (res) {console.log (res);}});});   php}  

Шаг 3: Теперь вам нужно создать функцию, в которой вы должны написать запрос,

  add_action ('wp_ajax_my_special_ajax_call_enroll_cours', 'enroll_cours'); add_action ('wp_ajax_nopriv_my_special_ajax_call_croll_my_special_ajax_call  );  function enroll_cours () {echo "Здесь вы можете написать запрос или что-нибудь еще";  } exit;}  

=> Если вы хотите запустить запрос ajax после кнопки onClick, просто передайте идентификатор кнопки

    


Простой пример Ajax WordPress · GitHub

php
функция example_ajax_enqueue () {
//Помещаем javascript в очередь на веб-интерфейсе.
wp_enqueue_script (
‘example-ajax-script’,
get_template_directory_uri (). ‘/js/simple -ajax-example.js ‘,
array (‘ jquery ‘)
);
//wp_localize_script позволяет нам выводить путь ajax_url для использования нашим скриптом.
wp_localize_script (
‘example- ajax-script ‘,
‘ example_ajax_obj ‘,
array (
‘ajaxurl’ => admin_url (‘ admin-ajax.php ‘),
‘ nonce ‘=> wp_create_nonce (‘ ajax-nonce ‘)
)
);
}
add_action (‘wp_enqueue_scripts’, ‘example_ajax_enqueue’);

jQuery (document) .ready (function ($) {
//Мы пройдем эту переменную в функцию PHP example_ajax_request
var fruit = ‘Banana’;
//Это делает запрос ajax
$ .ajax ({
url: example_ajax_obj.ajaxurl,
data: {
‘action’: ‘example_ajax_request’,
‘fruit’: fruit,
‘nonce’: example_ajax_obj.nonce
},
успех: функция (данные) {
//Th выводит результат запроса ajax
console.log (data);
},
ошибка: функция (errorThrown) {
консоль. log (errorThrown);
}
});
});

php
function example_ajax_request () {
$ nonce = $ _POST [‘nonce’];
if (! wp_verify_nonce ($ nonce, ‘example-ajax-script’)) {
die (‘ Значение nonce не может быть проверено. ‘);
}
//$ _REQUEST содержит все данные отправлено через ajax
if (isset ($ _ REQUEST)) {
$ fruit = $ _REQUEST [‘ фрукт ‘];
//Возьмем данные, которые были отправлены, и что-то с ними сделаем
if ($ fruit == ‘Banana’) {
$ fruit = ‘Apple’;
}
//Теперь вернем его в функцию javascript
//Все, что выведено, будет возвращено в ответе
echo $ fruit;
//Если вы отлаживаете, это может быть полезно чтобы увидеть, что было отправлено в $ _REQUEST
//print_r ($ _ REQUEST);
}
//Всегда умираем в функциях, повторяющих содержимое ajax
die ();
}
а dd_action (‘wp_ajax_example_ajax_request’, ‘example_ajax_request’);
//Если вы хотите также использовать функцию для незарегистрированных пользователей (например, в теме)
add_action (‘wp_ajax_nopriv_example_ajax_request’, ‘example_ajax_request’);

Оцените статью
logicle.ru
Добавить комментарий