web-dev-qa-db-fra.com

flush_rewrite_rules () ne fonctionne pas avec l'activation du plugin

J'expérimente avec la création d'un plugin simple pour créer un projet nommé de type publication personnalisé, mais j'ai quelques problèmes avec les règles de réécriture qui n'ont pas été supprimées lors de l'activation.

J'ai le fichier plugin principal avec cette fonction:

register_activation_hook( __FILE__, 'Project_Custom_Post_Type::activate' );

Ensuite, dans ma classe, j'ai ceci:

public function activate() {
  flush_rewrite_rules();
}

Ma classe a une construction de:

public function __construct() {
  add_action( 'init', array( $this, 'register_post_type' ), 0 );
}

Je ne vois pas pourquoi ça ne marche pas? Mon flush de désactivation fonctionne bien.

2
Philip Benton

Votre chaîne n'est pas lue comme un rappel. Vous devriez passer un tableau:

$pcpt = new Project_Custom_Post_Type;
register_activation_hook( __FILE__, array( $pcpt, 'activate' ) );

Notez que init se produit avant l'activation du plugin , afin que les rappels de votre classe ne soient pas exécutés.

1
fuxia

Lors de l'activation, l'action "init" a déjà été exécutée. Donc, votre flush se déroule parfaitement, mais votre type de message n’est pas enregistré avant le flush. Ajoutez le code pour enregistrer votre type de message dans votre fonction d'activation, avant de vider les règles de réécriture.

De plus, oui, votre appel au crochet d’activation est incorrect, comme l’a souligné toscho.

1
Otto