Як працює маршрутизація на wordpress?


13

Як працює маршрутизація core wp? Мені важко зрозуміти ... У MVC ваша URL-адреса виглядає як мій контролер / міяція, яка відображається на MyController-> myaction ()

У друпалі це index.php? Q = mycustomerpath / hello, який можна зіставити на будь-яку вподобану вам функцію, яка повертає вміст, який "тематичний" у ваш макет теми.

Але в wp, я не маю поняття, як це робиться ... це? P = 1, тоді? Product = 1 ... Я шукав документацію потоку маршрутизації, але не можу знайти жодного (Google просто повертає статті на користувацькі маршрути) .. я хочу зрозуміти основи основного маршрутизації спочатку ..


копаючи код, я бачу, що за кожним запитом він називає query_posts? чому на землі потрібно щоразу запитувати повідомлення? хіба не буває випадків, коли ви насправді не хочете показувати публікації ??
yeahman

1
Зміст зберігається як повідомлення в WP. Тож, коли вам потрібно показати вміст, вам потрібно його запитати
Sisir

Чи можу я запропонувати вам прочитати про "циклі" - це поняття, яке вам потрібно зрозуміти, щоб знати, як працює WordPress. По суті "цикл" відображає масив публікацій, який є результатом query_posts. Для запитів URL-адреси, які не є адміністратором, WP призначений для показу лише публікацій, а для додаткового програмування потрібне спеціальне програмування. Запити URL-адреси адміністратора різні, і вони не використовують "цикл" і не показують речі, які не належать до публікацій.

ОК, але такий підхід трохи дивний і не дуже гнучкий
tbh

скажіть, я хочу відобразити контактну форму .. мені потрібно ввести свій HTML у тип вмісту сторінки? Я все ще намагаюся знайти, де розмістити логіку для подання форми ... (у темі page.php? Дуже некрасивий підхід)
yeahman

Відповіді:


20

У WordPress URL-адреси не відображаються у маршрутах. Вони відображають запити до бази даних.

Під час використання WordPress у режимі постійних посилань "за замовчуванням" у вас є набір змінних у головному запиті URL-адреси, наприклад? P = 1 або? Page = 234 тощо. Є також? S = пошук та багато інших.

Якщо ви використовуєте "досить" постійні посилання, тоді створюється великий набір правил під назвою "правила перезапису", які безпосередньо відображають різні шаблони URL-адрес на цей самий набір параметрів URL-адреси. Так URL-адреса, як / 2014/04/12 / приклад, буде відображатись до? Year = 2014 & month = 04 & day = 12 & postname = приклад чи подібний. Отже, наступне стосується і цього, після цього картографування буде зроблено.

Ці змінні по суті керують основним екземпляром класу WP_Query. Клас WP_Query містить всю інформацію, яка будує запит до бази даних, щоб отримати "повідомлення" з бази даних. Різні параметри, що передаються в нього, керують тим, який тип запиту він будує та які дані він отримує.

Дивіться, все, що може відобразити WordPress, по суті є "дописом". Блог - це серія публікацій у зворотному часовому порядку. "Сторінка" - це статична публікація з визначеним іменем. "Спеціальний тип публікації" - це саме те, що воно звучить, "повідомлення" зі спеціальним типом, який ви визначаєте. Усі основні запити для відображення чого-небудь у WordPress отримують деякий підмножина публікацій з таблиці wp_posts.

WP_Query - це те, що робить це. А параметри з URL-адреси надсилаються безпосередньо в цей основний запит і використовуються там.

Потім тема визначає, який шаблон використовувати на основі того, що запит повертається. Якщо ви запитали / категорію / приклад, то це стає? Category_name = example, що означає, що основний масив $ wp_query-> query_vars отримає цю інформацію, і WP_Query витягне останні X публікації для категорії "приклад", і це встановить його прапор is_category на істину.

Завантажувач шаблонів запуститься після цього, побачте, що is_category () повертає true, і вирішить вибрати шаблон категорії, тому він буде шукати категорію-example.php і повернутися до категорії.php тощо, відповідно до Шаблону Ієрархія.

Отже, питання, якщо ви хочете змінити, як працюють URL-адреси, простий: чи потрібно змінити URL-адреси, або на що вони відображені? Оскільки URL-адреси не відображаються у функціях, вони відображаються до параметрів, які керують запитом. Якщо ви хочете, щоб URL-адреса коригувала цей основний запит, це дещо інший процес, ніж якщо ви хочете, щоб спеціальна URL-адреса запускала якийсь інший спеціальний код.

І щоб відповісти на ваше конкретне питання в коментарях: "чи не буває випадків, коли ви насправді не хочете показувати пости?" Ні, немає. Все - посада. Весь вміст зберігається в публікаціях. Якщо ви хочете зберігати вміст в іншому місці та бути іншим, тоді ви можете це зробити, але це складніше, бо, чесно кажучи, зазвичай це не потрібно. Якщо у вас є спеціальний вміст, створіть спеціальний тип публікації, збережіть свій вміст як публікацію з цим типом, нанесіть на нього шаблон URL-адреси. Легко.


Я розумію, що все повинно бути представлене у публікації (за допомогою спеціальних типів публікацій тощо). drupal 7 вирішив це шляхом введення типу сутності, так що вам не доведеться створювати спеціальний тип і зберігати все в таблиці вузлів, але у вашій власній таблиці сутностей, яка все ще може використовуватись з рамки drupal. Я сподіваюся, що wordpress запровадить такий підхід у майбутньому. THX для детального пояснення.
агаман

я здогадуюсь, якщо я хочу зіставити URL-адресу на власну функцію / тему, wp роутер допоможе?
агаман

Додавання повної системи маршрутизації зазвичай не потрібно. Є більш прості способи. Основою WordPress є відображення створеного користувачем вмісту, який весь зберігається в таблиці повідомлень. Якщо ви хочете відображати вміст, який не генерується користувачем, зазвичай ви робите це в темі чи плагіні. Існує сотні (тисяч) гачків і фільтрів для дій та інших способів коду, щоб перекрити різні частини процесу під час створення сторінки. І з такими речами, як шорт-коди, вставити користувальницький HTML у вміст порівняно просто.
Отто

як додати користувальницький html / php до створеного мною типу публікації? не змінюючи single.php теми або створюючи single-mycustompost.php (не дуже портативний підхід)
yeahman

7
після більш ніж 1 року роботи з wordpress зараз ... я все ще не переконаний у цьому ... рамка не елегантна і досить потворна ... Це працює як простий блог, але якщо ви хочете розробляти інші типи веб-сайтів. Це свого роду злом wordpress, щоб зробити щось, чого не передбачалося робити.
yeahman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.