Je modifie le mode multimédia en ajoutant un nouvel élément de menu pour ajouter des pièces jointes externes à la bibliothèque multimédia. Depuis le code JS, j'appelle une fonction PHP qui touche la base de données et accepte trois paramètres (url, post id et nonce). Ma question est, comment puis-je vérifier le nonce à partir du code PHP? Une autre question, l'envoi d'un nonce est-il vraiment nécessaire dans ce cas?
JS:
wp.media.controller.Custom = wp.media.controller.State.extend({
initialize: function(){
this.props = new Backbone.Model({ url: '' });
},
customAction: function(){
wp.media.post( 'add-attachment', {
url: this.props.get( 'url' ),
post_id: wp.media.view.settings.post.id,
nonce: wp.media.view.settings.post.nonce
});
}
});
PHP:
add_action( 'wp_ajax_add-attachment', 'add_attachment' );
function add_attachment() {
$url = trim($_POST['url']);
$post_ID = intval($_POST['post_id']);
$nonce = $_POST['nonce'];
CHECK NONCE HERE!
if (!current_user_can( 'edit_post', $post_ID ) ) {
wp_send_json_error();
}
$attachment = array( ...data... );
$attachment_id = wp_insert_post( $attachment );
if( ! is_int($attachment_id) ) {
wp_send_json_error();
}
if ( ! $attachment_js = wp_prepare_attachment_for_js( $attachment_id ) ) {
wp_send_json_error();
}
wp_send_json_success( $attachment_js );
}
Merci d'avance
A partir de 4.1.1, le nonce est défini dans wp-includes/media.php
, ligne 2883
:
$settings['post'] = array(
'id' => $post->ID,
'nonce' => wp_create_nonce( 'update-post_' . $post->ID ),
);
Donc pour vérifier le nonce:
wp_verify_nonce( $nonce, "update-post_$post_ID" );