WordPress вызов Ajax, может запускать функцию php, но не запускать функцию вне этого файла - PullRequest
0 голосов
/ 22 октября 2018

У меня есть вызов Ajax, который запускает функцию, скажем, из file1.php и работает нормально.Но когда я вызываю другую функцию, скажем, из файла file2.php, она не запускается и возвращает ошибку.

моя упрощенная установка:

//functions.php
require('dir1/php1.php');
require('dir2/php2.php');


//php1.php
function func1(){
  echo 'Hello world';
  echo func2();
}


//php2.php
function func2(){
  return 'Hello again';
}

Теперь func1 () ужезапустить на первой странице загрузки.Так что я знаю, что func1 () и func2 () работают нормально.Но похоже, что вызов Ajax забывает все require ().Потому что, когда я изменяю свой func1 () на это и добавляю требование, оно прекрасно работает:

//php1.php
function func1(){
   require('dir2/php2.php');
   echo 'Hello world';
   echo func2();
}

Сначала я подумал: «Мех, если это работает, это работает для этого вызова.Но теперь я дошел до того, что хочу вызывать больше и разные функции из большего количества файлов.Должен ли я повторно требовать все эти файлы все время?Это похоже на неправильный подход.Кроме того, я также хочу вызывать функции из плагинов, путь которых я не знаю.(Я мог бы выяснить, но это не главное)

- EDIT - Я обнаружил, что при запуске вызова ajax не перезагружается ни один из необходимых файлов.Разве Ajax не запускает код заново, включая весь ваш код из theme -> functions.php?Это жизненно важный код для вызова.

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Если вы используете WordPress ajax (wp_ajax), то это логично.

Ваш первый код:

Вы делаете запрос по ссылке в браузере, поэтому файл DIR путь правильный.От текущей директории к файлу, который вам требуется.

Ваш второй код:

Вы делаете запрос через ajax (wp-admin / admin-ajax.php), затем каталогне будет таким же.Потому что WordPress просто запускает функцию в этом admin-ajax.php файле и ищет ваш файл из этого каталога.

Поэтому я предлагаю указать полный путь к каталогу с путем /к / файлу.требуется (полная / реж / путь / к / файлу).

0 голосов
/ 22 октября 2018

Это то, что я в итоге сделал.

На основном файле functions.php мне потребовался внешний файл с именем include.php. Из этого файла мне требуются все необходимые мне файлы (не только дляfunc1 ()).Всякий раз, когда я делаю Ajax-вызов, я сначала обращаюсь к include.php.Это повторяет все требования.Я должен отметить, что они должны быть require_once (), иначе он найдет файл, из которого вы вызываете его, и вылетит.Он попытается повторно объявить функции, которые у него уже есть.

У меня такое ощущение, что это не самый чистый способ сделать это.Но я должен проверить это позже, когда у меня будет больше времени, чтобы увидеть, как WP на самом деле обрабатывает Ajax.

0 голосов
/ 22 октября 2018

Да, вы должны вызвать require в файле, который действительно нуждается в этом ресурсе.При включении php1 из functions будет вытягиваться зависимость.

Но так как вы используете WordPress, вы должны зарегистрировать свои функции AJAX, используя wp_ajax вместо непосредственного вызова файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...