Perché flush_rewrite_rules non viene eseguito all'attivazione del plugin?
Sto cercando di eseguire il flush delle regole di riscrittura in un plugin ma non funziona. Devo andare su permalink -> salva nel pannello di amministrazione affinché le riscritture vengano aggiornate. Qualcuno riesce a capire perché?
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"; // nome della variabile come appare nell'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 no. Alla disattivazione basta eseguire il flush, perché una volta che il plugin non è attivo nessuna regola viene aggiunta all'init.

Mmmm... Ho provato diverse volte a disattivare il mio plugin, eseguendo flush_rewrite_rules(); sull'hook di disattivazione ma l'analizzatore di rewrite continua a mostrare le mie regole di rewrite personalizzate dopo la disattivazione. Solo eseguendo il flush in impostazioni->permalink le fa scomparire (incluse le regole di rewrite aggiunte da Wordpress nella registrazione della tassonomia personalizzata da parte del plugin).

Se visito un URL gestito dal plugin dopo la disattivazione, ottengo la mia home page senza un codice 404 negli header HTTP. Solo dopo aver svuotato manualmente le regole di riscrittura otterrò l'errore 404, che è il codice di stato HTTP corretto se il plugin non è attivo. Quindi, è importante svuotare le regole di riscrittura quando il plugin viene disattivato. E dovrebbe essere fatto automaticamente nell'hook di disattivazione. Dovrei aprire una nuova domanda per questo?

So che possono essere svuotate manualmente ma non è questo il punto. Inoltre, preferisci non ottenere l'errore 404, ma anche le preferenze non sono il punto. Se una pagina non esiste, il server deve restituire un codice di stato 404, non è teoricamente corretto, è lo standard nelle applicazioni web.
