web-dev-qa-db-fra.com

Comment puis-je me connecter à la création d'une nouvelle publication et exécuter wp_die () avant que la publication ne soit insérée dans la base de données?

Informations sur wp_die à partir du codex: Supprimez l'exécution de WordPress et affichez le message HTML avec le message d'erreur. Un appel à cette fonction complète la fonction die () PHP. La différence est que HTML sera affiché à l'utilisateur. Il est recommandé d'utiliser cette fonction uniquement lorsque l'exécution ne doit plus continuer.

J'ai le code:

function myHook( $post_ID, $post )
{
     wp_die('Error', 'Error',  array( 'response' => 500, 'back_link' => true ));
}
add_action( 'save_post', 'myHook', 0, 2 );

Le problème est que la page d'erreur apparaît, mais que la publication est toujours insérée. La sauvegarde ne devrait-elle pas être interrompue par ce crochet? Si j'ai mal compris la description, comment puis-je interrompre l'exécution pour que la publication ne soit pas enregistrée?

EDIT: Je viens de constater que save_post est appelé après instert to database, pas avant. Existe-t-il une fonction appelée avant insertion que je peux accrocher?

Merci d'avance

2
user1666774

Essayez plutôt de filtrer avec wp_insert_post_data. C'est de wp-includes/post.php, ligne 2864.

add_filter( 'wp_insert_post_data', 'post_publish_filter_wpse_82356' );
function post_publish_filter_wpse_82356( $data ) {
    // view/manipulate $data
    if ('publish' == $data['post_status']) {
        $msg = '<pre>' . var_export($data, true) . '</pre>';
        wp_die($msg);
    }
    return $data;
}

publish est le post_status lorsque vous cliquez sur le boutonPublishouUpdate. Les quatre statuts que j'ai trouvés sont:

  • projet automatique - auto-explicatif (également, le statut est défini sur ceci lorsque vous cliquez surAjouter nouveau)
  • brouillon - lorsque vous cliquez sur le boutonSave Draft
  • inherit - lorsque vous cliquez sur le boutonPreview
  • publier - lorsque vous cliquez sur le boutonPublishouUpdate
2
akTed