Я знаю, что это можно сделать с помощью движка Rewrite, но я не могу этого сделать
Это мой файл .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
У меня есть этот URL www.mysite.com/report?page=my-report-name
Теперь я хочу получить следующее: www.mysite.com/report/my-report-name
Файл, к которому я обращаюсь к этой странице получения имени переменной, представляет собой reports.php, но его нет в моем корневом каталоге.
Путь к моему файлу: root / themes / fount / intel / reports.php
Кто-нибудь может помочь?
Обновленный ответ
Чтобы добавить маршрутизацию, указывающую на 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
Попробуйте этот код,
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# /anything/anything -> anything.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9_])/([^/]*)$ /$1.php?url=$2 [L]
</IfModule>
Если имя файла page.php всегда будет одинаковым, сделайте это так:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# /page/anything -> page.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([^/]*)$ /page.php?url=$1 [L]
</IfModule>
Спасибо!
Наконец-то это решение сработало для меня
Я добавил это в мой файл functions.php, который находится в нашей папке темы
function rewrite_photo_url(){
add_rewrite_rule('^report/([^/]*)/?','index.php?page_id=2671&value=$matches[1]','top');
}
function register_custom_query_vars($query_vars){
$query_vars[] = 'value';
return $query_vars;
}
add_action('init','rewrite_photo_url');
add_filter('query_vars','register_custom_query_vars');
а затем в моем php-файле я использую get_query_var (‘vale’), чтобы получить значение моего параметра