Скрыть имена параметров получения из URL

Я знаю, что это можно сделать с помощью движка 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

Кто-нибудь может помочь?

1

Решение

Обновленный ответ

Чтобы добавить маршрутизацию, указывающую на 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

0

Другие решения

Попробуйте этот код,

<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>

Спасибо!

1

Наконец-то это решение сработало для меня
Я добавил это в мой файл 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’), чтобы получить значение моего параметра

0