J'ai créé une boîte méta pour la page voir le code suivant:
add_action('add_meta_boxes', 'add_metaboxes');
function add_metaboxes() {
add_meta_box(
'wpt_slider_meta',
'Add Slider Image',
'wpt_slider_meta',
'slider',
'normal',
'default'
);
}
function wpt_slider_meta() {
global $post;
wp_nonce_field(plugins_url(__FILE__), 'meta_slider_noncename');
$values = get_post_meta($post->ID, '_meta-slider_img', true);
// Some html and scripts to upload image.
}
add_action( 'save_post', 'save_slider_img' );
function save_slider_img( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( 'slider' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post_id ) )
return;
} else {
if ( !current_user_can( 'edit_post', $post_id ) )
return;
}
if(wp_verify_nonce($_POST['meta_slider_noncename'], plugins_url(__FILE__)) )
{
$images = $_POST['meta-slider_img'];
update_post_meta( $post_id, '_meta-slider_img', $images );
}
}
J'ai reçu deux avertissements lorsque je clique sur Ajouter une nouvelle page. sauf que tout le code fonctionne bien.
Notice: Undefined index: post_type in /var/www/html/transport/wp-content/themes/transport/functions.php on line 192
Notice: Undefined index: meta_slider_noncename in /var/www/html/transport/wp-content/themes/transport/functions.php on line 200
Quelqu'un peut aider?
save_post
est appelé lorsque post est inséré ou mis à jour. Lorsque vous accédez à ajouter une nouvelle publication, une publication est créée et insérée dans la base de données. C'est en fait une ébauche. À ce moment-là, $_POST
est vide, par conséquent, vous voyez des avertissements.
Solution:
La meilleure option est de quitter la fonction dès que vous ne trouvez pas nonce
. Et utilisez isset()
pour vérifier si la clé est présente.
Exemple:
function save_slider_img( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if (!isset($_POST['meta_slider_noncename'])) {
return;
}
if(!wp_verify_nonce($_POST['meta_slider_noncename'], plugins_url(__FILE__))) {
return;
}
if ('slider' == $_POST['post_type'] && current_user_can( 'edit_page', $post_id )) {
$images = isset($_POST['meta-slider_img']) ? $_POST['meta-slider_img'] : false;
update_post_meta( $post_id, '_meta-slider_img', $images );
}
}