Власні RewriteRule в WordPress

Опубліковано:

У деяких випадках дуже зручно і корисно використовувати власні RewriteRule в WordPress, як мінімум для красивих адрес посторінкового відображення будь-яких списків.

Наприклад, потрібно реалізувати посторінковий вивід у власній (custom) Taxonomy “tools”, щоб адреса при посторінковому виведенні виглядала приблизно так:

/tools/scissors/p2

де «p2» є ідентифікатором другої сторінки списку “категорії” інструментів “ножиці” (scissors).

Ініціалізувати RewriteRule в WordPress краще при події “init”, тобто потрібно створити функцію, яка буде виконуватися при ініціалізації WordPress.

    add_action('init', 'Tools_RewriteRule_Init');

    function Tools_RewriteRule_Init()
    {
        add_rewrite_tag('%tools-slug%', '([^&]+)');        
        add_rewrite_tag('%pg%', '([^&]+)');

        add_rewrite_rule('tools\/([a-z0-9_-]{1,})$', 'index.php?page_id=25&tools-slug=$matches[1]', 'top');
        add_rewrite_rule('tools\/([a-z0-9_-]{1,})\/p([0-9]{1,})$', 'index.php?page_id=25&tools-slug=$matches[1]&pg=$matches[2]', 'top');

        flush_rewrite_rules();
    }

Тут важливо зауважити, що робота з шаблоном Taxonomy ведеться через об’єкт сторінки, тому додано два додаткових GET-параметра “page_id” (ID сторінки, до якої застосовано свій власний шаблон для роботи з Taxonomy “tools”) і “tools-slug” (ідентифікатор Taxonomy). У рядках 5 і 6 ми визначаємо теги (GET) в правила формування адреси, які потім зможемо отримати у вигляді значень в змінних. У рядках 8 і 9 додаємо правила для розбору нових адрес.

Функція “add_rewrite_tag” має два вхідних параметра:

  1. Ім’я GET-змінної.
  2. Регулярний вираз для фільтра вхідних даних GET-змінної.

Функція “add_rewrite_rule” має три вхідних параметри:

  1. Само правило нової адреси (все робиться за допомогою регулярних виразів, в тому числі виділення змінних).
  2. Безпосередньо внутрішню адресу, яку доносить собою до скриптів распарсені (з пункту 1) дані.
  3. Пріоритет даного RewriteRule в WordPress (“top” або “bottom”).

Всі распарсені і потрібні дані адреси зберігаються в масиві $matches[] (всередині цієї функції), який використовується в другому параметрі (як показано на прикладі).

Вкладеної функцією “flush_rewrite_rules” перестворити всі доступні RewriteRule, по суті оновлюється кеш всіх правил. В принципі, цю функцію досить виконати один раз, тому зазвичай після її використання коментують до наступних доданих нових або змінених RewriteRule в WordPress.