AJAX в wordpress плагине в switch

145
18 апреля 2018, 06:35

Сразу код, который не работает, в конце вопрос =):

Главный файл плагина wordpress:

define('UrlPlugin', plugin_dir_path(__FILE__)); // Путь до плагина
switch ($_SERVER['REQUEST_URI']) { // Навигация по сайту
    case '/vyistavit-redaktirovat-golosa':
        include UrlPlugin.'addEditVote/AddEditVote.php';
        break;
}

Файл AddEditVote.php:

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 с AJAX запросом, добавленный в предыдущем файле:

var data = {
    action: 'hello',
};
jQuery.post(localizePlugin.ajaxURL, data, function (response) {
    alert('Получено с сервера: ' + response);
});

Нужно:

  • Что бы на определённой странице сайта срабатывал AJAX и все файлы, связанные с ним хранились в отдельной папке плагина.
  • В коде выше, все пути прописаны правильно (перепроверил много раз), экшн для не авторизованных не требуется.
  • Если из

switch

вытащить

include UrlPlugin.'addEditVote/AddEditVote.php';

И просто разместить в главном файле плагина, то всё работает, но на всех страницах сайта. Как только загоняешь в switch или if, то перестаёт работать и появляется 400 ошибка AJAX

Answer 1

admin-ajax.php возвращает 400, когда не определена акция.

Следовательно, ваша add_action не срабатывает. Она внутри switch. Наверняка условие в switch неправильное.

Update

Условие в switch срабатывает при первичной загрузке страницы. Запускается js файл, ajax вызов срабатывает. Всё хорошо.

Но при запросе ajax на сервер у вас в REQUEST_URI находится admin-ajax.php и ничто другое! Switch не срабатывает, акция не добавляется, и admin-ajax.php возвращает вам 400. Вот такое кино.

READ ALSO
Изменить запрос на получение фото из Instagram

Изменить запрос на получение фото из Instagram

Получал фото из Instagram вот так:

163
Не обрабатывается ошибка 404 Yii2

Не обрабатывается ошибка 404 Yii2

Следовал всем возможным инструкциям в интернете, но почему-то всегда отображется только стандартная страница ошибки вебсервераВ конфиге...

166
Подсчет скидки от суммы

Подсчет скидки от суммы

При выборе чекбоксов, нужно посчитать скидкуСкидка 12% от 5 шт

183
Как удалить атрибут элемента при помощи JS?

Как удалить атрибут элемента при помощи JS?

Как убрать все атрибуты тега style

220