WordPress Rewrite API: основи

Ця стаття є першою у серії про WordPress Rewrite API. Другу частину ви можете знайти тут: WordPress Rewrite API: частина 2

Що таке Rewriting?

WordPress Rewrite API є маловідомою частиною API цієї CMS. Ймовірно тому, що не тільки новачки, але й досвідчені користувачі мало або зовсім не стикаються з цією сферою функціонування двигунця. Наприклад, при розробці теми чи у процесі її експлуатації вам навряд доведеться скористатись методами Rewrite API. Хіба що ви програмуєте зовсім не пересічний проект :)

Як це працює

Якщо коротко, то будь-яка CMS, в тому числі і WordPress, вирішує який контент показувати користувачу виходячи із змінних отриманих нею. Наприклад, ми повинні передати WP унікальний номер (ID) допису, що він показав нам вміст цього поста: http://example.com/?p=1, де p це змінна для ID допису, а 1 це її значення. Це все просто, але… некрасиво) Тут на допомогу приходить Rewrite API з його методами, що дозволяють формувати ось такі красиві постійні посилання: http://example.com/post-title/, де post-title це slug ім’я допису. Це страшенно зручно, бо такі посилання виглядають красиво і легко запам’ятовуються. WP парсить це красиве посилання, підбирає заздалегідь створений шаблон і підставляє у нього дані. У нашому прикладі, у підсумку WP розуміє наше красиве посилання як http://example.com/index.php?name=%post-title% і знаходить допис зі slug ім’ям post-title.

Як додати своє правило реврайту (add_rewrite_rule)

Найцікавіше у всьому цьому те, що ви можете додати власні правила реврайту. Наприклад:

У першому випадку ми передбачаємо наявність змінної з назвою станції метро на сторінках усіх категорії суші. У другому – те саме тільки лише для трьох визначених категорій. Є реально існуючі сторінки категорій sushi, roll, set зі своїми посиланнями типу http://example.com/sushi-cats/sushi. І ви не можете довільно модифікувати ці посилання, наприклад так http://example.com/sushi-cats/sushi/foo/bar. Ви неодмінно отримаєте помилку 404 при переході на таку сторінку. Тепер же у вас з’явились нові діючі посилання, наприклад http://example.com/sushi-cats/sushi/metro/arsenalna. Наразі, ці сторінки і далі показуватимуть сторінку категорії sushi, але вже не викликатимуть помилки 404! :)

Ось цей код дозволить вам додати власні правила реврайтів:

Після додання/зміни правила обов’язково скидайте кеш реврайтів, інакше ваші зміни не діятимуть! Це можна зробити просто відвідавши сторінку в адмінці Settings -> Permalink page або з допомогою функції flush_rewrite_rules()

Додаємо нову змінну реврайту (add_rewrite_tag)

Ви мабуть вже здогадались, що metro це нова змінна, що може мати різні значення. Очевидно, нам потрібно отримати значення цієї змінної у шаблоні сторінки щоб мати змогу з нею працювати. Раніше я вже згадував, що “покращенні” з допомогою Rewrite API змінні, всерівно фактично є get параметрами у посиланні. Однак ви не матимете доступу до цих змінних через $_GET при використанні таких красивих посилань.

Використання $_GET не дасть вам доступу до змінних. Ви повинні використовувати глобальну змінну $wp_query ось так $wp_query->query_vars['назва_змінної'] або get_query_var( 'назва_змінної' )

Цьому може зарадити функція add_rewrite_tag(). Ось як її використовують:

Ваш тег повинен бути унікальним і не повинен співпадати з переліком зарезервованих тегів самим WP.

Ось ще один спосіб як можна додати свій власний тег:

Обидва роблять одне і теж. Відмінність лише у тім, що з допомогою першого методу можна додати свій регекс.

Власне, ось це коротко основи WordPress Rewrite API. У наступній статті розглянемо інші його методи і інші практичні приклади використання. Stay tuned! :)

Коментарі (1)

Вам вже є 18 років?

Для переходу по цьому посиланню ви повинні підтвердити, що вам виповнилось 18 років.

Мені немає 18 Мені вже є 18