web-dev-qa-db-fra.com

Exclure la corbeille de save_post

J'ai une fonction qui traite les données de métabox personnalisées lors de la sauvegarde de mon type de message personnalisé:

add_action('save_post_customtypehere','myown_save_customtype_fn');
function myown_save_customtype_fn($ID) { ... }

Cependant, la fonction est également exécutée lorsque je supprime des éléments au sein de ce CPT (je suppose que cela enregistre effectivement le message pour remplacer post_status par trash). Sans la metabox présente, ma fonction finit par effacer des choses comme post_name (pas génial si j'ai besoin de restaurer depuis la corbeille!).

J'ai deux idées en tête, mais je n'arrive pas à franchir la ligne d'arrivée avec eux:

1) Afin de mettre à jour les données de publication, j'utilise à nouveau remove_action() et add_action() autour de wp_update_post(array('post_key'=>$sanitized_form_input)) - conformément aux instructions du codex, ceci est nécessaire pour éviter une boucle infinie. Existe-t-il un moyen similaire d'exclure d'une action trash_post (j'ai déjà essayé remove_action('trash_post','myown_save_customtype_fn' immédiatement après la ligne add_action d'origine).

2) Y a-t-il quelque chose que je peux utiliser dans une condition au sein de myown_save_customtype_fn (à l'instar de if (current action!='trash_post') { ...)

1
Adam

save_post est renvoyé une fois la publication enregistrée. Nous obtenons l'objet post actuel comme second paramètre. Nous pouvons donc vérifier si le statut actuel de la publication est corbeille:

<?php
add_action( 'save_post', function( $post_ID, $post, $update ) {
    if ( 'trash' === $post->post_status ) {
        return;
    }

    /** do your stuff **/
}, 10, 3 );
?>
2
websupporter