hard flush_rewrite_rules () regeneriert nicht .htaccess

Ich entwickle gerade ein Thema, wo ich zwei Permalinks hinzufügen möchte.
Einer leitet mit einigen benutzerdefinierten Parametern und Werten (die Regel ist in der Tabelle wp_options gespeichert) zur index.php um, der andere leitet zu einer Datei in meiner Vorlage um, die die admin-ajax.php functionalität bietet (Regel in .htaccess Datei gespeichert) .

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 ); } ); 

Während ich im Entwicklungsmodus bin, spüle ich die Regeln, indem ich auch auf den “init” Haken helfe
( Ich weiß, dass dies eine schlechte Übung ist, aber dies scheint die beste Methode zu sein, um zu überprüfen, ob es Änderungen in der .htaccess-Datei gibt. ).

Das Problem:
Auch wenn flush_rewrite_rules() harte flush_rewrite_rules() standardmäßig zurücksetzt, flush_rewrite_rules() ich den Parameter nur auf “true”, um sicherzugehen. Meine erste Rewrite-Regel funktioniert sehr gut, während die .htaccess-Datei nicht neu generiert wird, bis ich die Optionen-permalink.php-Seite im Backend besuche (wo auch die Flush-function aufgerufen wird und funktioniert ?!).

Ich habe bereits versucht, flush_rewrite_rules flush_rewrite_rules() auf einem anderen Haken flush_rewrite_rules() wie in der Referenz vorgeschlagen.

Vielen Dank im Voraus für Ihre Hilfe!

Bearbeiten:
Sogar das Ändern des Codes in das Folgende hat sich genauso verhalten …

 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 () regeneriert nicht .htaccess"

Versuchen Sie, dies für das Umschreiben zu verwenden:

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

Schau, ob das funktioniert.

Scheint so, als würden Sie die internen Rewrite-Regeln, die eigentlich “Parsing-Regeln” heißen sollten, mit htaccess-Rewrite-Regeln verwechseln. Sie sind nicht gleich und funktionieren im Allgemeinen nicht auf die gleiche Weise.

Ihre erste Regel ist eine Parsing-Regel, die zweite ist eine Rewrite-Regel, die

  1. sollte gar nicht gemacht werden. Der direkte Zugriff auf eine PHP-Datei ist aus mehreren Gründen ein No-No, auch wenn Sie es in irgendeiner Weise maskieren.

  2. Sie benötigen den htaccess-Generierungs-Hook, der, wie Sie richtig gesehen haben, nur auf der Permalink-Seite ausgetriggers wird, oder Sie müssen die Generierung in Ihrem Code auslösen. Da dies eine schlechte Idee ist, weil Punkt 1. und es wird nicht funktionieren in Multisite, ich fühle mich gerechtfertigt, faul zu sein und nicht die Namen des functionsaufrufs und Hooks zu graben;)

Endlich fand ich die Lösung … save_mod_rewrite_rules() ist die function, die Rewrite-Regeln erzeugt und hinzufügt. Im Doc heißt es:

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

Diese function ist Teil von wp-admin/includes/misc.php welches von wp-admin/includes/admin.php geladen wird, welches direkt vor dem admin_init Aktions-Hook geladen wird.

Trotzdem sollten Sie die Rewrite-Regeln niemals bei einem Init-Aktions-Hook löschen : Flush Rewrite Examples