web-dev-qa-db-fra.com

Erreur 'post_type' non définie sur Ajouter une nouvelle page

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?

1
PlanetHackers

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 );
    }
}
2
Sumit