hard flush_rewrite_rules () не регенерирует .htaccess

В настоящее время я разрабатываю тему, где я хочу добавить две постоянные ссылки.
Один из них перенаправляет на index.php некоторые пользовательские параметры и значения (правило хранится в таблице wp_options), другое перенаправляет файл в мой шаблон, который предлагает функцию admin-ajax.php (правило, хранящееся в файле .htaccess) ,

add_action( 'init', 'custom_rewrite_rules' ); function custom_rewrite_rules() { add_rewrite_rule( '^(activate|reset)/([0-9]*)sfa([A-Za-z0-9]*)/?$', 'index.php?sfa_user=$matches[2]&sfa_password_reset=$matches[3]', 'top' ); add_rewrite_rule( 'ajax-api/?$', str_replace( ABSPATH, '', dirname( dirname( __FILE__ ) ) . '/api/ajax-api.php' ) ); flush_rewrite_rules( true ); } ); 

Поскольку я работаю в режиме разработки, я очищаю правила, выполняя также на «init»
( Я знаю, что это плохая практика, но это, по-видимому, лучший метод для проверки того, есть ли какие-либо изменения в файле .htaccess. ).

Проблема:
Несмотря на то, что flush_rewrite_rules() сбрасывает жесткую промывку по умолчанию, я устанавливаю параметр true, чтобы убедиться. Мое первое правило перезаписи очень хорошо работает, тогда как файл .htaccess не восстанавливается до тех пор, пока я не перейду на страницу options-permalink.php в бэкэнд (где функция флеша также называется и работает ?!).

Я уже пробовал excecuting flush_rewrite_rules() на других крючках, как это предлагается в ссылке.

Заранее спасибо за вашу помощь!

Редактировать:
Даже изменение кода на следующее поведение ведет себя одинаково …

 global $wp_rewrite; $wp_rewrite->add_rule( '^(activate|reset)/([0-9]*)sfa([A-Za-z0-9]*)/?$', 'index.php?sfa_user=$matches[2]&sfa_password_reset=$matches[3]', 'top' ); $wp_rewrite->add_external_rule( 'ajax-api/?$', str_replace( ABSPATH, '', dirname( dirname( __FILE__ ) ) . '/api/ajax-api.php' ) ); $wp_rewrite->flush_rules( true ); 

Solutions Collecting From Web of "hard flush_rewrite_rules () не регенерирует .htaccess"

Попробуйте использовать это для перезаписи:

 global $wp_rewrite; $wp_rewrite->flush_rules( true ); 

посмотрите, будет ли это работать.

Похоже, вы вводите в заблуждение внутренние правила перезаписи, которые должны были называться «правила синтаксического анализа», с правилами перезаписи htaccess. Они не то же самое и вообще не работают одинаково.

Первое правило – это правило синтаксического анализа, второе – правило перезаписи, которое

  1. не следует делать вообще. Доступ непосредственно к файлу php является не-no по нескольким причинам, даже если вы каким-то образом замаскируете его.

  2. Вам нужен крюк генерации htaccess, который, как вы правильно заметили, будет запускаться только на странице постоянной ссылки, или вам придется запускать генерацию в вашем коде. так как это плохая идея из-за пункта 1. и она не будет работать в многопользовательском режиме, я чувствую себя оправданным в том, что я ленив, а не копаю имена вызова функции и перехватываю;)

Наконец, я нашел решение … save_mod_rewrite_rules() – это функция, которая будет генерировать и добавлять правила перезаписи. В Доке говорится:

 /* If the function named 'save_mod_rewrite_rules' exists, it will be called. */ 

Эта функция является частью wp-admin/includes/misc.php которая загружается с помощью wp-admin/includes/admin.php который загружается непосредственно перед admin_init action hook.

Тем не менее, вы никогда не должны сбрасывать правила перезаписи на любой крючок инициации : примеры перепрошивки Flush