wordpress add_action(‘save_post’, ‘my_function) ne fonctionne pas

Publié par Jean-Michel le

J’essaie de déclencher un événement lors de l’enregistrement/de la mise à jour d’un message dans wordpress… voir ici :

add_action('save_post', 'generate_location');

function generate_location($post_id) {   
    echo "hey"; 
}

le problème est que cela ne fonctionne pas… des idées pourquoi? Syntaxe?

Solution n°1 trouvée

Je ne sais pas si cela fonctionne, mais j’avais le même problème et j’ai découvert comment le résoudre !

dans wp-includes/post.php sur la ligne 2940 (au moment de la rédaction), ce if/else est exécuté lors de l’enregistrement d’un message :

if ( !empty($page_template) && 'page' == $data['post_type'] ) {

Vous remarquerez que, s’il y a une erreur avec le modèle, la fonction s’arrête là et save_post n’est jamais appelée.

Dans mon cas, les messages que j’essayais d’enregistrer ont été importés d’un site préexistant. Le nouveau site n’avait aucun modèle de page du tout, donc WP essayait toujours de sauvegarder la page avec le modèle d’avant, échouant, et donc; save_post n’a jamais été appelé.

J’ai ajouté

/* Template Name: Default Template */

à page.php, édition en bloc, sélectionné le modèle et enregistré. Supprimez le nom du modèle de page.php (car il apparaît deux fois (, et maintenant save_post est déclenché à chaque fois.

C’était la solution dans mon cas en tout cas. Je suis sûr que cela affectera quelqu’un d’autre, quelque part sur la ligne.

Solution n°2 trouvée

WordPress implémente le modèle Post/Redirect/Get pour éviter les soumissions de formulaires en double, de sorte que vous ne verrez rien echod’un save_postrappel.

Au lieu de cela, vous pouvez faire un à la wp_die( 'hey' )place, ou enregistrer quelque chose dans la base de données ou le système de fichiers.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *