Поддержка Проблемы и решения WordPress обнуляет суперглобальные массивы

  • Решено mordegard

    (@mordegard)


    Всем привет.
    Сразу к проблеме:
    В подключенном js-скрипте я с помощью AJAX выполняю запрос на сервер к скрипту modal-data.php.
    В js-скрипте передаю id, в php-скрипте пытаюсь его принять через суперглобальный массив $_POST.
    Если первой же строчкой выводить id через $_POST, все происходит без проблем, поле id там есть.
    Но как только я вызываю WordPress-функции (the_post(), get_post() и т.д.) массив $_POST очищается и id оказывается недоступно.
    Очищается не только $_POST, но и остальные ($_GET, $_REQUEST)
    Код JS-скрипта:

    const mainUrl = "/wordpress/wp-content/themes/conditioners/modal-data.php";
    
    $('.box-product').on('click', function(ev) {
    
        $.ajax({
            method: "POST",
            url: mainUrl,
            data: {
                postID: ev.target.id
            },
            success: function(response, status) {
                document.getElementsByClassName('box-scroll-padding')[0].innerHTML = response;
            }
        });
    });

    Код PHP-скрипта:

    <?php
    
        echo $_POST['postID']; // выводит id
    
        get_post($_POST['postID']); // после этой строчки $_POST очищается, id недоступен
    
    ?>
    

    Вывод: Notice: Undefined index: postID in … on line 5

    Пытаюсь решить второй день, сломал мышку, телефон, пылесос, кота, тёщу.
    Заранее спасибо

    • Тема изменена 5 мес., 3 нед. назад пользователем  mordegard.
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • потому что get_post это функция вп и в стороннем файле работать не будет.

    нужно добавить require_once($_SERVER[‘DOCUMENT_ROOT’]. ‘/wp-load.php’); в начало файла

    PHP-скрипт является частью шаблона, функции вп там прекрасно работают, то есть если я напишу get_post(64), то он выдаст мне этот пост с id равным 64

    ну может из-за этого

    PHP-скрипт является частью шаблона

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    PHP-скрипт является частью шаблона, функции вп там прекрасно работают

    Работают, когда движок подключает файл шаблона в процессе вывода страницы, но не когда файл вызывается AJAX-скриптом в обход движка. Правильная работа с AJAX в WordPress описана в статье «AJAX in Plugins». Код обработчика запроса нужно разместить не в шаблонах, а в файле функций темы (привязав к действиям wp_ajax_* и wp_ajax_nopriv_*) или оформить в виде плагина.

    Вывод: Notice: Undefined index: postID in … on line 5

    Такое сообщение говорит о том, что $_POST очищается ещё до выполнения get_post(), т.е. проблема в чём-то другом.

    Чуть покопался, отсоединил этот скрипт от всех шаблонов, подставил строчку вами предложенную, создал новый WP_Query, в аргументы передал id и … Работает!
    Дай вам Б-г здоровья. Спасибо!

Просмотр 5 ответов — с 1 по 5 (всего 5)