Перезапись Url – Sef Add_Rewrite_Rule И Add_Rewrite_Tag Не Работают

  • Автор темы Con.vol2015
  • Обновлено
  • 21, Oct 2024
  • #1

Я создаю URL-адреса SEF для своего плагина. Логика такова: если на странице есть my_shortcode, то передайте остальную часть URL как параметр dir=

 
  // if ($parent_page) {

// if (preg_match('/\[my_shotrcode(.*?)\]/i', $content)) {
 

Этот код отлично работает на одной из моих установок WordPress и не работает на другой. У меня 404. Что на нем может быть не так?

P.s. правила перенаправления сброшены

add_action('init', array( $this, 'do_rewrite' )); public function do_rewrite() { $page = get_page_by_path($_SERVER['REQUEST_URI']); if (! isset($page->ID)) { preg_match('#^/?(.*?)/(.+)/?$#', $_SERVER['REQUEST_URI'], $matches); $parent_page = get_page_by_path($matches[1]); if ($parent_page) { $content = $parent_page->post_content; if (preg_match('/\[my_shotrcode(.*?)\]/i', $content)) { add_rewrite_rule('^/?(.*?)/(.+)/?$', 'index.php?pagename=$matches[1]&dir=$matches[2]', 'top'); add_rewrite_tag('%dir%', '([^&]+)'); } } } }

ОБНОВЛЯТЬ:

Кто-нибудь может объяснить мне, что происходит? Я прокомментировал эти 2 if:

Con.vol2015


Рег
03 Nov, 2019

Тем
67

Постов
234

Баллов
579
  • 25, Oct 2024
  • #2

Похоже, проблема в сбросе правил. Сброс правил из «Настройки-Постоянные ссылки» как-то не помогает, поэтому я сделал это в таком коде:

 if (! in_array('index.php?pagename=$matches[1]&dir=$matches[2]', get_option('rewrite_rules'))) {

flush_rewrite_rules();
}
 
 

Dspdsp


Рег
23 Jun, 2005

Тем
83

Постов
215

Баллов
650
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно