Perché flush_rewrite_rules non viene eseguito all'attivazione del plugin?

5 set 2013, 11:04:26
Visualizzazioni: 1.89K
Voti: 1

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') );
0
Tutte le risposte alla domanda 1
6

Prima di applicare le regole devi aggiungerle:

public function activate() {
  $this->add_rewrite_rules();
  flush_rewrite_rules();
}
5 set 2013 12:57:12
Commenti

Questo vale anche per l'hook di disattivazione?

cybmeta cybmeta
6 set 2013 13:32:38

@cybnet no. Alla disattivazione basta eseguire il flush, perché una volta che il plugin non è attivo nessuna regola viene aggiunta all'init.

gmazzap gmazzap
6 set 2013 15:15:47

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).

cybmeta cybmeta
6 set 2013 15:26:29

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?

cybmeta cybmeta
6 set 2013 16:52:33

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.

cybmeta cybmeta
6 set 2013 17:13:22

Non intendo prolungare la discussione. Dai commenti puoi vedere il punto: svuotare automaticamente le regole di riscrittura durante l'attivazione e la disattivazione (come indicato che si può fare nella documentazione di WordPress) e seguire gli standard.

cybmeta cybmeta
6 set 2013 17:37:16
Mostra i restanti 1 commenti