WordPress базовое пользовательское правило перезаписи

#php #wordpress #.htaccess #mod-rewrite

#php #wordpress #.htaccess #мод-перезапись

Вопрос:

Я прошу прощения за этот простой вопрос, на который, несомненно, отвечали бесчисленное количество раз на этом сайте, но я не могу понять, почему мое правило перезаписи не вступает в силу.

Вот мой код:

 add_action('init', 'update_rewrite_rules');
function update_rewrite_rules(){
    add_rewrite_rule('^org/([^/] )', 'index.php?pagename=about-usamp;org=$matches[1]', 'top');
    add_rewrite_tag('%org%', '[0-9] ');
}
  

Насколько я понимаю, это должно преобразовать «myurl.com/org/13 » чтобы «myurl.com/index.php?pagename=about-suamp;org=13 «. Что я делаю не так???

Я могу записать его в файл .htaccess просто отлично, но, конечно, я сталкиваюсь с проблемой того, что пользовательская функция перезаписи PHP WordPress заменяет мой код, поэтому найдена только переменная, но не страница.

В любом случае, любые советы или вопросы для размышления будут оценены! Спасибо.

Ответ №1:

Я считаю, что вам нужно зарегистрировать переменную запроса перед фактическим правилом перезаписи. Кроме того, как указано в WordPress Rewrite API, он распознает новые правила только после их очистки и восстановления кэша.

 //Ensure the $wp_rewrite global is loaded
global $wp_rewrite;
//Call flush_rules() as a method of the $wp_rewrite object
$wp_rewrite->flush_rules();
  

Обратите внимание, что по соображениям производительности вы не должны делать это каждый запрос, только при активации вашего плагина.

 add_action('admin_init', 'flush_rewrite_rules');
  

Существует также другой способ добавления пользовательских правил перезаписи, как описано в пользовательских вопросах.