Ajax в WordPress вне functions.php

102
05 сентября 2019, 15:50

Есть ли возможность запустить Ajax, используя API WordPress, вне границ functions.php?

Я пытался сделать, но у меня ошибка. Переносил код обратно в functions.php и всё работает...

Смысл в том, чтобы на одной странице Ajax срабатывал, а на другой - нет. А так получается, что запрос к базе происходит каждый раз, когда пользователь ходит по сайту. Будет у меня, например, 20 Ajax и все 20 сработают, хотя потребности в них нет.

Пробовал ограничивать через проверку URL, но тогда Ajax вообще не работает...

Answer 1

Вы можете запускать скрипт только на нужных вам страницах. Делается это примерно таким кодом в functions.php

add_action( 'wp_enqueue_scripts', 'my_scripts' );
function my_scripts() {
    if ( is_page( 'home' ) ) {
        wp_enqueue_script( 'my-script', 'my-script.js', array( 'jquery' ), '1.0', true );
    }
}

На странице home ваш скрипт будет запущен, а на других - нет.

Прямой ответ на ваш вопрос - да, можно запустить ajax (имея ввиду php-обработчик) вне functions.php. Но только в тех файлах, которые загружаются при ajax. Это все файлы плагинов (и каждый более или менее сложный плагин использует ajax), файлы темы (начиная с functions.php). Но не шаблон вашей "текущей" страницы! Обработчик ajax-запроса в ядре WP ничего не знает о том, какая страница на экране у пользователя.

Поэтому ваши попытки вынести обработчик ajax вне functions.php не увенчались успехом.

READ ALSO
Как прочитать строку URL? [закрыт]

Как прочитать строку URL? [закрыт]

Например пользователь ввел строку типа http://examplecom/page/ehdfngdfbgf

123
ssh2_connect() для xampp

ssh2_connect() для xampp

Fatal error: Uncaught Error: Call to undefined function ssh2_connect() in

136
HasMany - сохранить данные по ассоциации в cakePHP

HasMany - сохранить данные по ассоциации в cakePHP

помогите решить проблемуЕсть две таблицы business_departments и companies, связь hasMany

123
Непонятный абзац в книге

Непонятный абзац в книге

В книге "PHPОбъекты, шаблоны и методики программирования" (4-e издание), на 154-й странице есть следующий абзац:

117