¿Por qué no se ejecuta flush_rewrite_rules al activar el plugin?
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') );

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

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

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?

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.
