Как определить, какой файл / функция будет использоваться для ответа на определенный URL?

Я Drupalista, который изредка работает в WordPress, поэтому это может быть очевидно 🙂 Я помогал коллеге отлаживать поведение AJAX, и, получив URL-адрес обратного вызова от Firebug, я не был уверен, как перевести это в файл и функционируют на стороне сервера. Может кто-нибудь просветить ?! ТИА

Solutions Collecting From Web of "Как определить, какой файл / функция будет использоваться для ответа на определенный URL?"

WP не совсем работает. Как работает WP, это длительная и дискуссионная дискуссия, но вот короткая версия.

(BTW, AJAX – это совсем другое дело. В WP есть целая система, просто для того, чтобы легко выполнять запросы AJAX, и большинство людей делают это неправильно. Если ваш вопрос специфичен для AJAX, ни одно из ниже не может применяться.)

Первое, что нужно понять, это переписать систему. WordPress использует класс WP_Rewrite, который по существу реализует правила перезаписи, аналогичные тому, как вы это делали в файле .htaccess. Он использует регулярные выражения для преобразования «хороших» URL-адресов в переменные запроса.

Например, http://example.com/author/otto будет преобразован в http://example.com/index.php?author_name=otto внутренне. Аналогично, http://example.com/2011/08/04 будет преобразован в http://example.com/index.php?year=2011&monthnum=08&day=04 .

Существует довольно большой набор этих правил (50+), которые генерируются для обработки этих случаев URL-адресов, и что эти правила на самом деле зависят от ваших настроек, каких пользовательских типов сообщений вы используете и т. Д. Кроме того, темы и плагины и такие также могут их регулировать.

Эти переменные запроса стандартизируются и называются в системе WP_Query, которая контролирует запросы, запрашиваемые в базе данных. Так, что year / monthnum / day вещь читается и превращается в $ wp_query-> year и $ wp_query-> monthnum и так далее. Это работает на основе белой системы, поэтому переменные должны быть заранее определены либо базовым кодом, либо плагинами / темами, которые их корректируют.

Во всяком случае, основной WP_Query инициализируется и заполняется системой WP_Rewrite. Когда запрос выполняется, он определяет, что он вытаскивает из базы данных, исходя из того, какие переменные установлены. Он устанавливает кучу флагов, таких как is_author и is_archive, и is_home и is_single и аналогичные, чтобы обозначать различные типы вещей. В широком смысле они используются для определения иерархии шаблонов .

После этого вызывается загрузчик шаблонов, чтобы определить, какую часть темы отображать. Используя эти правила is_ * и ряд функций определения шаблона, выбирается один из файлов шаблонов темы, а затем вызывается для отображения страницы. Предполагается, что в шаблоне будет реализовано что-то, называемое The Loop , которое в основном вытягивает сообщения из основного $ wp_query global и отображает их правильно, в соответствии с тем, что оно хочет сделать это.

Таким образом, это не вопрос файлов и функций, это вопрос процедур, основанных на переменных входах. Все вызовы в WordPress в основном принимают одну и ту же последовательность событий:

  1. URL-адрес анализируется в переменных запроса.
  2. Основной запрос выполняется на основе этих переменных.
  3. Иерархия шаблонов определяет, какой файл темы использовать.
  4. Файл темы отображает страницу.

Как правило, если вы хотите изменить ситуацию на существующих страницах, вы либо изменяете нужный файл в теме (или создаете новую на основе иерархии тем), либо создаете новый «тип» вещи (например, пользовательский пост Type), который может автоматически настраивать как переменные запроса, так и переписывать правила соответствующим образом, или если вы делаете что-то совершенно обычное, то сами делаете и сами изменяете правила перезаписи.

Дело в том, что для того, чтобы изменить вещи самым простым способом, вы должны действительно перестать думать о подключении URL-адресов к функциям, но вместо этого начните думать о том, какие вещи я использую, и что я хочу, чтобы они действительно делали и как я хочу, чтобы они жили внутри системы? "

Более конкретные вопросы помогут вам получить более конкретные ответы. 🙂

Проблема в том, что многие люди делают ajax свой собственный путь, а не используют WordPress при условии ajax.

Если это правильный способ WordPress, js вызовет /wp-admin/admin-ajax.php через ajaxurl var и передаст action , которое будет отображаться в add_action('wp_ajax_{$action}', 'some_function'); где-то в some_function functions.php или плагине, который будет вызывать some_function при действии.