De ce nu rulează flush_rewrite_rules la activarea pluginului?

5 sept. 2013, 11:04:26
Vizualizări: 1.89K
Voturi: 1

Î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') );
0
Toate răspunsurile la întrebare 1
6

Înainte de a reîmprospăta regulile, trebuie să le adăugați:

public function activate() {
  $this->add_rewrite_rules();
  flush_rewrite_rules();
}
5 sept. 2013 12:57:12
Comentarii

Se aplică acest lucru și pentru hook-ul de dezactivare?

cybmeta cybmeta
6 sept. 2013 13:32:38

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

gmazzap gmazzap
6 sept. 2013 15:15:47

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

cybmeta cybmeta
6 sept. 2013 15:26:29

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?

cybmeta cybmeta
6 sept. 2013 16:52:33

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

cybmeta cybmeta
6 sept. 2013 17:13:22

Nu voi prelungi discuția. Din comentarii se poate vedea ideea: resetează regulile de rescriere automat la activare și dezactivare (așa cum se menționează că se poate face în documentația WordPress) și urmează standardele.

cybmeta cybmeta
6 sept. 2013 17:37:16
Arată celelalte 1 comentarii