De ce nu rulează flush_rewrite_rules la activarea pluginului?
Încerc să aplic flush_rewrite_rules într-un plugin și nu funcționează. Trebuie să merg la permalinkuri -> salvare în panoul de administrare pentru ca rescrierile să se aplice. Poate cineva să vadă de ce?
class SpektrixPlugin {
public function __construct(){
add_filter('query_vars', array($this, 'add_query_vars'));
add_action('init', array($this, 'add_rewrite_rules'));
}
public function activate() {
flush_rewrite_rules();
}
public function deactivate() {
flush_rewrite_rules();
}
public function add_query_vars($vars) {
$vars[] = "event"; // numele variabilei așa cum apare în URL
return $vars;
}
public function add_rewrite_rules() {
$page = get_page_by_title( 'Event' );
add_rewrite_rule( 'whats-on/(.+)/?$' , 'index.php?page_id='.$page->ID.'&event=$matches[1]' , 'top' );
}
}
$SpektrixEvents = new SpektrixPlugin;
register_activation_hook( __FILE__, array($SpektrixEvents, 'activate') );
register_deactivation_hook( __FILE__, array($SpektrixEvents, 'deactivate') );

@cybnet nu. La dezactivare doar flush, pentru că odată ce plugin-ul nu este activ, nicio regulă nu este adăugată la init.

Mmmm....Am încercat de mai multe ori să dezactivez plugin-ul meu, rulând flush_rewrite_rules(); pe hook-ul de dezactivare, dar analizorul de rewrite încă afișează regulile mele personalizate după dezactivare. Doar flush-ul din setări->permalinks le face să dispară (inclusiv regulile de rewrite adăugate de Wordpress în înregistrarea taxonomiei personalizate de către plugin).

Dacă vizitez un URL gestionat de plugin după dezactivare, primesc pagina principală fără un cod 404 în antetele HTTP. Doar după ce resetez manual regulile de rescriere voi primi eroarea 404, care este codul de stare HTTP corect dacă pluginul nu este activ. Deci, este important să resetăm regulile de rescriere când pluginul este dezactivat. Și acest lucru ar trebui făcut automat în hook-ul de dezactivare. Ar trebui să deschid o nouă întrebare pentru asta?

Știu că pot fi resetate manual, dar nu asta este ideea. De asemenea, preferi să nu primești eroarea 404, dar preferințele nu sunt nici ele ideea. Dacă o pagină nu există, serverul trebuie să returneze un cod de stare 404, nu este doar teoretic corect, este standardul în aplicațiile web.
