¿Por qué no se ejecuta flush_rewrite_rules al activar el plugin?

5 sept 2013, 11:04:26
Vistas: 1.89K
Votos: 1

Estoy intentando actualizar las reglas de reescritura en un plugin y no funciona. Tengo que ir a enlaces permanentes -> guardar en el panel de administración para que se actualicen. ¿Alguien puede ver por qué?

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"; // nombre de la variable como aparece en la 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
Todas las respuestas a la pregunta 1
6

Antes de actualizar las reglas, debes agregarlas:

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

¿Esto también aplica para el hook de desactivación?

cybmeta cybmeta
6 sept 2013 13:32:38

@cybnet no. En la desactivación solo haz flush, porque una vez que el plugin no está activo no se agregan reglas en init.

gmazzap gmazzap
6 sept 2013 15:15:47

Mmmm... He intentado varias veces desactivar mi plugin, ejecutando flush_rewrite_rules(); en el hook de desactivación pero el analizador de rewrite sigue mostrando mis reglas personalizadas después de la desactivación. Solo al hacer flush en ajustes->enlaces permanentes desaparecen (incluyendo las reglas de rewrite añadidas por Wordpress en el registro de taxonomía personalizada del plugin).

cybmeta cybmeta
6 sept 2013 15:26:29

Si visito una URL manejada por el plugin después de la desactivación, obtengo mi página de inicio sin un código 404 en los encabezados HTTP. Solo después de vaciar manualmente las reglas de reescritura obtendré el error 404, que es el código de estado HTTP correcto si el plugin no está activo. Por lo tanto, es importante vaciar las reglas de reescritura cuando el plugin se desactiva. Y debería hacerse automáticamente en el hook de desactivación. ¿Debería abrir una nueva pregunta sobre esto?

cybmeta cybmeta
6 sept 2013 16:52:33

Sé que se pueden vaciar manualmente, pero ese no es el punto. Además, prefieres no obtener un error 404, pero las preferencias tampoco son el punto. Si una página no existe, el servidor debe devolver un código de estado 404, no es teóricamente correcto, es el estándar en las aplicaciones web.

cybmeta cybmeta
6 sept 2013 17:13:22

No voy a extender la discusión. Por los comentarios se puede ver el punto: vaciar las reglas de reescritura automáticamente en la activación y desactivación (como se dice que se puede hacer en la documentación de WordPress) y seguir los estándares.

cybmeta cybmeta
6 sept 2013 17:37:16
Mostrar los 1 comentarios restantes