Скрыть имена параметров получения из URL - PullRequest
0 голосов
/ 17 сентября 2018

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

Файл, к которому я обращаюсь на этой странице получения имени переменной, - это отчеты.php и его нет в моем корневом каталоге. Путь к моему файлу: root / themes / fount / intel / reports.php

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

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

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

Чтобы добавить маршрутизацию, которая указывает на файл 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 голосов
/ 19 сентября 2018

Наконец-то это решение сработало для меня. Я добавил это в мой файл 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 голосов
/ 17 сентября 2018

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

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

Спасибо!

...