web-dev-qa-db-fra.com

Type de message personnalisé Metabox - Not Saving

J'ai ajouté un type de message personnalisé, qui fonctionne très bien. J'ai également ajouté deux métaboxes, qui semblent bien fonctionner, mais leur contenu disparaît toujours après quelques minutes.

Si quelqu'un pouvait m'aider, je vous en serais éternellement reconnaissant, S.

// code de la meta box //

add_action( 'admin_init', 'add_custom_metabox' );
add_action( 'save_post', 'save_custom_details' );

function add_custom_metabox() {
    add_meta_box( 'custom-metabox', __( 'Product Description & Ingredients' ), 'descr_custom_metabox', 'sorbets', 'normal', 'low' );
}

function descr_custom_metabox() {
    global $post;
    $proddescr = get_post_meta( $post->ID, 'proddescr', true );
    $ingredients = get_post_meta( $post->ID, 'ingredients', true );
    ?>
    <p><label for="proddescr">Product Description:<br />
        <textarea id="proddescr" name="proddescr" style="margin:0;height:7em;width:98%;" cols="45" rows="4"><?php if( $proddescr ) { echo $proddescr; } ?></textarea></label></p>
    <p><label for="ingredients">Ingredients:<br />
        <textarea id="ingredients" name="ingredients" style="margin:0;height:7em;width:98%;" cols="45" rows="4"><?php if( $ingredients ) { echo $ingredients; } ?></textarea></label></p>
<?php
}

function save_custom_details( $post_ID ) {
    global $post;   
    if( $_POST ) {
        update_post_meta( $post->ID, 'proddescr', $_POST['proddescr'] );
        update_post_meta( $post->ID, 'ingredients', $_POST['ingredients'] );
    }
}

function get_descr_ingred_box() {
    global $post;

    $proddescr = get_post_meta( $post->ID, 'proddescr', true );
    $ingredients = get_post_meta( $post->ID, 'ingredients', true );

    return array( $proddescr, $ingredients );
}
1
sta777

Vous devez vérifier autosave et éviter cela, vérifiez également si vous êtes dans le type de message correct, car save_post fonctionne pour tous les messages:

function save_custom_details( $post_id ) {
    global $post;   
    //skip auto save
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }
    //check for you post type only
    if( $post->post_type == "sorbets" ) {
        if( isset($_POST['proddescr']) ) { update_post_meta( $post->ID, 'proddescr', $_POST['proddescr'] );}
        if( isset($_POST['ingredients']) ) { update_post_meta( $post->ID, 'ingredients', $_POST['ingredients'] );}

    }
}

WOW, vous êtes rapides :)

3
Bainternet

La seule différence que je vois par rapport à ce que vous faites ici et à la fonction que j’utilise est que vous vous basez sur le poste global $ post pour configurer l’ID, c’est peut-être ce qui résout le problème pour vous.

Vous remarquerez que la variable $ post_ID est déjà passée dans cette fonction:

function save_custom_details( $post_ID ) {
    global $post;   
    if( $_POST ) {
        update_post_meta( $post->ID, 'proddescr', $_POST['proddescr'] );
        update_post_meta( $post->ID, 'ingredients', $_POST['ingredients'] );
    }
}

Je suggérerais de le changer en ceci:

function save_custom_details( $post_ID ) {
    if( isset($_POST) ) {
        update_post_meta( $post_ID, 'proddescr', $_POST['proddescr'] );
        update_post_meta( $post_ID, 'ingredients', $_POST['ingredients'] );
    }
}

J'ai également changé votre condition de ($ _POST) à (isset ($ _ POST)), c'est un moyen plus fiable d'obtenir une réponse à une instruction IF. Faites-moi savoir si cela aide. Sinon, je vais creuser un peu plus loin.

0
Drew Gourley