Задача: Создать "плагин" на WP, который будет генерировать форму и отображать её на определённых страницах. Форма, при помощи AJAX, будет получать нужные данные из БД, в зависимости от ранее заполненных пунктов этой формы.
Вопрос: Как правильно реализовать?
Если в главном файле плагина создать хук wp_ajax_(action) с функцией, сделать подключения JS, то всё работает.
Не получается сделать ajax, если весь код выше, добавить в главный файл при помощи include. Выскакивает ошибка 400
Код в главном файле плагина:
include_once UrlPlugin.'addEditVote/AddEditVote.php';
Файл AddEditVote.php(всё, что ниже, располагается в отдельной папке):
// при срабатывании хука действия wp_ajax с экшеном hello, выполняется функция say_hello
add_action( 'wp_ajax_hello', 'say_hello' );
function say_hello() {
echo "УРАААААААААААА!";
wp_die();
}
// при хуке действии wp_enqueue_scripts, вызываем функцияю, которая зарегистрирует JS код обработчика AJAX и выставил её после jQuery
add_action('wp_enqueue_scripts', function () {
wp_enqueue_script('ajaxAddEditVote', plugins_url('ajaxAddEditVote.js', __FILE__), array('jquery'), null);
// До вывода JS, вызванного wp_enqueue_script, выводим JS объект с какими либо значениями
wp_localize_script('ajaxAddEditVote', 'localizePlugin', array(
'ajaxURL' => admin_url('admin-ajax.php')
));
});
И сам JS файл ajaxAddEditVote.js:
jQuery(document).ready( function() {
var data = {
action: 'hello'
};
jQuery.post(localizePlugin.ajaxURL, data, function (response) {
alert('Получено с сервера: ' + response);
});
});
Как это сделать правильно (последовательность подключения файлов и запросов, ознакомился с кучей тем и в итоге полная путаница =). спасибо) ?
В целом всё сделано правильно, и подтверждением этому является работа при включении кода в основной файл плагина.
Ошибка при выносе в include заключается в том, что вы используете магическую константу __FILE__, которая указывает на текущий файл кода. При выносе кода __FILE__ получает другое значение, и wp_enqueue_script() не запускает ваш скрипт вообще.
Ещё надо бы добавить nonce, согласно руководству. Сейчас ваш сайт, в теории, можно заставить выполнить серверный код say_hello(), послав POST-запрос извне.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей