Это может быть хитрый вопрос, потому что маршрутизация будет означать отображение HTTP-запроса для запуска определенной функции или метода, который будет обрабатывать запрос, который не является тем, что делает WordPress (внизу есть раздел о WordPress). Проще говоря, вы читаете информацию HTTP-запроса, чтобы решить, какая функция будет запущена.
Немного подробнее в простых словах
если вы строите проект PHP с нуля и хотите отобразить определенный контент или вызвать метод / функцию, обычно есть два варианта (без маршрутизации)
Однако, если вы создали Маршрутизатор (алгоритм маршрутизации, как вы его назвали, или систему маршрутизации), то отправили все запросы в index.php и включили последний, скажем, что-то вроде этого:
// Include the Router class
require('classes/router.php');
// Include functions responsible for display our content
require('view/display.php');
Я не буду вдаваться в подробности о том, как создать маршрутизатор, просто приведу примеры, предполагающие, что у вас уже есть такой, чтобы дать вам представление о том, как работает маршрутизация.
Итак, если у вас есть маршрутизатор и функция для отображения формы контакта, например, вы бы добавили что-то вроде этого:
Router::add('/contact-us', get_contact_form(),'get');
Router::add('/contact-us', handle_contact_form(),'post');
Затем инициализируйте маршрутизатор
Router::initialize('/');
Опять же, при условии, что у вас есть полный Маршрутизатор, указанная выше функция сообщит файлу index.php, что запросы HTTP к этому URL будут обрабатываться иначе:
http://example.com/contact-us
Если это тип запроса по умолчанию GET, активируйте эту функцию get_contact_form()
, но если тип запроса POST, активируйте эту handle_contact_form()
, которая будет действовать и отображать содержимое по-разному в зависимости от ваших потребностей.
Это здорово, потому что это было бы вместо чего-то вроде
http://example.com/index.php?page=contact-us
Содержимое index.php будет обрабатывать запрос иначе, поскольку маршрутизатор отсутствует.
// Include functions responsible for display our content
require('view/display.php');
if( isset($_GET['page']) && $_GET['page'] == 'contact-us'){
echo get_contact_form();
}
if( isset($_GET['page']) && $_GET['page'] == 'contact-us' && isset($_POST['contact_submit']) ){
echo handle_contact_form();
}
Представьте, как долго и безобразно это будет выглядеть, если у вас много страниц и сложный сайт.
Итак, вернемся к WordPress
Если у вас новая установка, вы заметите, что URL выглядит примерно так:
http://example.com/?p=62
http://example.com/?cat=1
http://example.com/?author=3
Таким образом, он просто взял бы параметры URL, а затем построил WP_Query на основе этого, если это p
, тогда ищите сообщения в базе данных по ID, если cat
, тогда ищите категории по ID и так далее ... (это простое объяснение, конечно, в фоновом режиме многое происходит, но только для того, чтобы дать представление).
После изменения структуры постоянной ссылки вы можете заметить, что приведенные выше примеры теперь будут выглядеть примерно так:
http://example.com/post-slug
http://example.com/author/name
http://example.com/category/uncategorized
Это может выглядеть как маршрутизация, но это не так, давайте подробнее рассмотрим, как это работает.
При запросе URL-адреса (pretty-link) в WordPress первое, что происходит, это то, что .htaccess
ищет папку / файл с тем же именем на сервере, если он существует, он будет обслуживаться, если нет, он будет отправить этот запрос в файл index.php, который делает одну вещь:
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
загрузка файла wp-blog-header.php
, который выполнит небольшую проверку, чтобы убедиться, что код выполняется только один раз, а затем:
// Load the WordPress library.
require_once( dirname(__FILE__) . '/wp-load.php' );
// Set up the WordPress query.
wp();
// Load the theme template.
require_once( ABSPATH . WPINC . '/template-loader.php' );
Давайте не будем углубляться в эти файлы, нас больше всего беспокоит то, что делают 'wp-load.php' и 'template-loader.php'
сор-load.php
Этот, помимо прочего, ищет wp-config, удостоверится, что все настроено правильно, затем подключается к базе данных, конечно, после большой инициализации, настройки констант, загружающих множество файлов, которые обрабатывают различные части структуры WordPress.,Частью этого процесса является то, что WordPress пытается сопоставить URL-адрес запроса с большим набором правил, называемых правила перезаписи , которые установлены из регулярных выражений , когда совпадение найдено, WordPress переведет этоURL в запрос к базе данных, используя класс [WP_Query][1]
, который расположен в wp-includes/class-wp-query.php
, и этот класс будет сохранять результаты запроса среди прочего (тип запроса ... и т. Д.)
template-loader.php
Этот обрабатывает часть дисплея, он использует некоторую функцию WordPress, которая использует WP_Query (например, is_home ()), чтобы выяснить, какой тип контента должен отображаться, затем загружает правильныйоснованный на этом шаблон, и, наконец, шаблон будет использовать WP_Query для отображения результата.