Обновленный ответ
Чтобы добавить маршрутизацию, которая указывает на файл PHP внешнего обработчика, следует использовать следующий фрагмент:
function wprre_add_rewrite_rules() {
global $wp_rewrite;
// pattern with regexps
$wp_rewrite->add_external_rule( '^wp_report/([\w\d-]+)/?', PATH_TO_THE_EXTERNAL_HANDLER.'report.php?report_name=$1' );
}
add_action('init', 'wprre_add_rewrite_rules');
Вы можете заметить одно различие в обработке параметров между add_external_rule () и add_rewrite_rule. Вы должны использовать селектор совпадений, так как в этом случае его использует Apache.
Этот фрагмент должен быть помещен в файл, который всегда загружается вашим плагином или темой. Если вы пишете плагин, он может быть основным файлом плагина. В случае разработки темы это может быть основной файл functions.php.
Регистрация пользовательских параметров GET работает так, как это было упомянуто в исходном ответе.
ВАЖНО
После того, как вы отредактировали правила перезаписи с помощью кода (внешнего или внутреннего, обоих), вы должны перейти на страницу настроек Постоянной ссылки в панели администратора и нажать кнопку Сохранить без изменений. Это необходимо, потому что это сбросит правила перезаписи и WP запишет в файл .htaccess правила.
По этой причине я рекомендую вам подключить событие активации плагина и зарегистрировать правила перезаписи, а затем немедленно запустить команду flush_rewrite_rules ().
ПРИМЕЧАНИЯ
Проблема с исходным ответом состояла в том, что функция add_rewrite_rule () работает только в том случае, если вы перенаправляете к базовому index.php по умолчанию. Вы можете только изменять параметры, но не можете направлять к внешнему файлу.
Оригинальный ответ
Я думаю, что вы должны использовать WordPress API для достижения этой цели. Вам нужно будет добавить правило перезаписи и тег в тему или плагин с этим синтаксисом:
!! Отказ от ответственности это работает только для маршрутизации к основному index.php !!
Для маршрутизации добавьте правило перезаписи, которое указывает на ваш файл PHP.
function custom_rewrite_basic() {
add_rewrite_rule('^report/([\w-]+)/?', 'index.php?page=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
Если вы хотите использовать параметр запроса, которого нет в списке стандартных параметров WP, вам нужно добавить имя этого пользовательского параметра.
function custom_rewrite_tag() {
add_rewrite_tag('%page%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
Имейте в виду, что вы используете встроенные параметры, если вы не используете его в качестве WP API.
В этой статье Кодекса вы найдете более подробную информацию о теме:
https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
Для устранения неполадок и более глубокого понимания погружения вы также можете проверить эту статью Кодекса, которая описывает правильное использование правила перезаписи. Потому что в некоторых случаях вам необходимо сбросить правила перезаписи (активация / деактивация плагина).
https://codex.wordpress.org/Function_Reference/flush_rewrite_rules