В WordPress URL не отображаются на маршруты. Они отображаются на запросы к базе данных.
При использовании WordPress в режиме постоянных ссылок «по умолчанию» в основном URL-запросе есть набор переменных, например? P = 1 или? Page = 234 и т. Д. Там же? S = search и многие другие.
Если вы используете «симпатичные» постоянные ссылки, то создается большой набор правил, называемый «правила перезаписи», который напрямую сопоставляет различные шаблоны URL с этим же набором параметров URL. Таким образом, URL-адрес, например / 2014/04/12 / example, будет сопоставлен с? Year = 2014 & month = 04 & day = 12 & postname = example или аналогичным. Так что следующее применимо и к ним, после того, как это сопоставление выполнено.
Эти переменные по сути управляют основным экземпляром класса WP_Query. Класс WP_Query содержит всю информацию, которая формирует запрос к базе данных, чтобы получить «сообщения» из базы данных. Различные параметры, передаваемые в него, определяют, какой запрос он создает и какие данные он получает.
Видите, все, что может отображать WordPress, по сути является "постом". Блог - это серия постов в обратном порядке. «Страница» - это статический пост с определенным именем. «Пользовательский тип записи» - это именно то, на что это похоже, «публикация» с пользовательским типом, который вы определяете. Все основные запросы для отображения чего-либо в WordPress получают некоторое подмножество сообщений из таблицы wp_posts.
WP_Query это то, что делает. И параметры из URL отправляются непосредственно в этот основной запрос и используются там.
Затем тема определяет, какой шаблон использовать, основываясь на том, с чем возвращается запрос. Если вы запросили / category / example, то это станет? Category_name = example, что означает, что основной массив $ wp_query-> query_vars получит эту информацию, а WP_Query извлечет последние X сообщений для категории «example», и это установит для своего флага is_category значение true.
После этого загрузится шаблонный загрузчик, увидит, что is_category () возвращает true, и решит выбрать шаблон категории, поэтому он будет искать category-example.php и вернуться к category.php и так далее, в соответствии с шаблоном Иерархия.
Итак, вопрос, хотите ли вы изменить работу URL-адресов, прост: хотите ли вы изменить URL-адреса или на что они отображаются? Поскольку URL-адреса не сопоставлены с функциями, они сопоставлены с параметрами, которые управляют запросом. Если вы хотите, чтобы URL корректировал этот основной запрос, то это немного другой процесс, чем если вы хотите, чтобы специальный URL запускал какой-то совершенно другой специальный код.
И чтобы ответить на ваш конкретный вопрос в комментариях: «разве нет случаев, когда вы на самом деле не хотите показывать сообщения?» Нет, нет Все это пост. Весь контент хранится в постах. Если вы хотите хранить контент в другом месте и отличаться от других, вы можете сделать это, но это сложнее, потому что, честно говоря, обычно это не нужно. Если у вас есть специальный контент, создайте пользовательский тип публикации, сохраните контент как публикацию с этим типом, сопоставьте шаблон URL с ним. Легко.