Как настроить правило перезаписи (rewrite rule) для WordPress?

Как я могу улучшить следующие аспекты кода для достижения моих целей:

1. Как можно более кратко указать путь в функции add_rewrite_rule() без явного указания корня сайта?
2. Почему значения GET-параметра employee_id не передаются после обновления постоянных ссылок через админку?
3. Почему стандартные функции WordPress не загружаются в подключаемом файле? Нужно ли добавлять require wp_core.php?
Изображение к вопросу
  • 8 февраля 2024 г. 18:39
Ответы на вопрос 1
Для настройки правила перезаписи в WordPress вам необходимо использовать функцию `add_rewrite_rule()`. Данная функция позволяет добавлять свои правила перезаписи (rewrite rules) для интерпретации URL.

Вот как вы можете улучшить указанные аспекты:

1. **Краткость пути:**
   Вы можете просто указать шаблон URL относительно корня сайта в `add_rewrite_rule()`, без необходимости включения самого корня сайта. WordPress сам позаботится о преобразовании этого шаблона в полный URL.

2. **Передача GET-параметров:**
   При использовании `add_rewrite_rule()`, вы должны указать, к каким внутренним запросам WordPress должен относиться данный шаблон. Для передачи GET-параметров используйте правильные местозаполнители (query vars). После добавления новых правил перезаписи не забудьте сбросить их с помощью функции `flush_rewrite_rules()` или путём обновления постоянных ссылок через админ-панель.

3. **Загрузка WordPress функций:**
   Если ваш подключаемый файл должен работать в контексте WordPress и использовать его функциональность, вам не нужно подключать `wp_core.php`. Вместо этого, убедитесь, что ваш файл подключается в рамках WordPress, т.е. он не должен вызываться напрямую через URL. Все WordPress функции автоматически будут доступны, если ваш файл исполняется в экосистеме WordPress (например, через хук).

Пример правила перезаписи:

```php
function custom_rewrite_rule() {
    add_rewrite_rule(
        '^employee/([0-9]+)/?',
        'index.php?pagename=employee&employee_id=$matches[1]',
        'top'
    );
}

add_action('init', 'custom_rewrite_rule');

// Затем, вы должны добавить 'employee_id' в список разрешённых GET-параметров, чтобы WordPress понимал этот параметр.
function custom_query_vars($vars) {
    $vars[] = 'employee_id';
    return $vars;
}

add_filter('query_vars', 'custom_query_vars');

// После добавления правил, сбросьте перезапись правил (однократно, например, при активации плагина)
function custom_rewrite_flush() {
    custom_rewrite_rule();
    flush_rewrite_rules();
}

register_activation_hook(__FILE__, 'custom_rewrite_flush');
```

Также убедитесь, что ваш файл шаблона `employee` правильно обрабатывает получение `employee_id` через объект запроса `$wp_query`, например:

```php
$employee_id = get_query_var('employee_id');
```

Обратите внимание, что частое использование `flush_rewrite_rules()` может замедлить ваш сайт, так как это достаточно ресурсоёмкая операция. Обычно её вызывают только при активации/деактивации плагина.

Не забудьте проверить, работает ли ваша пользовательская страница `employee` и отображается ли она корректно при обращении к URL вида `/employee/123`, где `123` - это `employee_id`.
Похожие вопросы