[Résolu] update_post_meta n’enregistre pas les données (Créer un compte)

  • WordPress :5.8
  • Statut : résolu
3 sujets de 1 à 3 (sur un total de 3)
  • Auteur
    Messages
  • #2402239
    mumu51
    Participant
    Padawan WordPress
    97 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7
    • Thème utilisé : Je le fais moi-même
    • Extensions en place : Askimet
    • Nom de l’hébergeur : En local
    • Adresse du site : En local

    Problème(s) rencontré(s) :

    J’insère des méta-box dans des custom-post types et dans mes pages et je rencontre un souci avec la fonction update_post_meta de WordPress.
    En vérité, c’est à n’y rien comprendre, car la fonction marche bien pour certaines méta-box et pas pour d’autres, et honnêtement j’ai beau regardé à n’importe quoi (simples quotes, doubles quotes, la façon dont j’ai nommé la propriété name et ou mon type de méta-données), je ne vois pas du tout où est l’erreur…

    Peut-être avez-vous de meilleurs yeux ou avez-vous déjà rencontré le problème ?
    L’enregistrement ne fonctionne pas sur les méta-box testimonial, sur les infos de snippet et pour le slogan de page

    Mon code ci-après :

    //Metaboxs
    function init_metabox(){
        add_meta_box('work_resume', 'Propriétés', 'am_work_resume', 'portfolio', 'side', 'high');
        add_meta_box('experience_resume', 'Résumé expérience', 'am_experience_resume', 'experience', 'side', 'high');
        add_meta_box('experience_articles', 'Articles', 'am_experience_articles', 'experience', 'normal', 'high');
        add_meta_box('experience_description', 'Description', 'am_experience_description', 'experience', 'normal', 'high');
        add_meta_box('experience_gallery', 'Galerie', 'am_experience_gallery', 'experience', 'side', 'high');
        add_meta_box('formation_resume', 'Formation', 'am_formation_resume', 'experience', 'side', 'high');
        add_meta_box('testimonial_author', 'Auteur témoignage', 'am_testimonial_author', 'testimonial', 'side', 'high');
        add_meta_box('snippet_resume', 'Infos snippet', 'am_snippet_resume', 'snippets', 'side', 'high');
        add_meta_box('page_slogan', 'Accroche de votre page', 'am_page_slogan', 'page', 'normal', 'high' );
    }
    
    function am_work_resume($post){
        $date = get_post_meta($post->ID,'_date_work',true);
        $string = '<div class="components-flex"><label for="date_meta" class="components-base-control__label">Réalisation :</label>';
        $string .= '<input id="date_meta" type="text" class="components-text-control__input" name="date_work" value="'. $date .'" /></div>';
    
        $customer = get_post_meta($post->ID,'_customer_work',true);
        $string .= '<div class="components-flex"><label for="customer_meta" class="components-base-control__label">Client :</label>';
        $string .= '<input id="customer_meta" type="text" class="components-text-control__input" name="customer_work" value="'. $customer .'" /></div>';
    
        $link = get_post_meta($post->ID,'_link_work',true);
        $string .= '<div class="components-flex"><label for="link_meta" class="components-base-control__label">Lien :</label>';
        $string .= '<input id="link_meta" type="url" class="components-text-control__input" name="link_work" value="'. $link .'" /></div>';
    
        echo $string;
    }
    
    function am_experience_resume($post){
        $date_debut = get_post_meta($post->ID,'_date_experience',true);
        $string = '<div class="components-flex"><label for="date_meta" class="components-base-control__label">Date de début :</label>';
        $string .= '<input id="date_meta" type="date" class="components-text-control__input" name="date_experience" value="'. $date_debut .'" /></div>';
    
        $date_fin = get_post_meta($post->ID,'_end_activity',true);
        if ($date_fin == "") : $date_fin = date('Y-m-d'); endif;
        $string .= '<div class="components-flex"><label for="date_meta" class="components-base-control__label">Date de fin :</label>';
        $string .= '<input id="end_meta" type="date" class="components-text-control__input" name="end_activity" value="'. $date_fin .'" /></div>';
    
        $speciality = get_post_meta($post->ID,'_speciality_experience',true);
        $string .= '<div class="components-flex"><label for="speciality_meta" class="components-base-control__label">Spécialité :</label>';
        $string .= '<input id="speciality_meta" type="text" class="components-text-control__input" name="speciality_experience" value="'. $speciality .'" /></div>';
    
        $contract = get_post_meta($post->ID,'_contract_experience',true);
        $string .= '<div class="components-flex"><label for="contract_meta" class="components-base-control__label">Type de contrat :</label>';
        $string .= '<input id="contract_meta" type="text" class="components-text-control__input" name="contract_experience" value="'. $contract .'" /></div>';
    
        $location = get_post_meta($post->ID,'_location_experience',true);
        $string .= '<div class="components-flex"><label for="location_meta" class="components-base-control__label">Localisation :</label>';
        $string .= '<input id="location_meta" type="text" class="components-text-control__input" name="location_experience" value="'. $location .'" /></div>';
    
        $during = get_post_meta($post->ID,'_during_experience',true);
        $string .= '<div class="components-flex"><label for="during_meta" class="components-base-control__label">Durée d\'activité :</label>';
        $string .= '<input id="during_meta" type="text" class="components-text-control__input" name="during_experience" value="'. $during .'" /></div>';
    
        echo $string;
    }
    
    function am_experience_description($post){
        $description = get_post_meta($post->ID,'_description_experience',true);
        $string = '<div class="components-flex"><label for="description_meta" class="components-base-control__label"></label>';
        $string .= '<input id="description_meta" type="textarea" class="components-text-control__input" name="description_experience" value="'. $description .'" /></div>';
    
        echo $string;
    }
    
    function am_experience_articles($post){
        $articles = get_post_meta( $post->ID, '_articles_experience', true );
        wp_nonce_field( 'save_feat_articles', 'am_repeatable_meta_box_nonce' ); ?>
        <table id="am-repeatable-fieldset" width="100%">
            <thead>
                <tr>
                    <th width="40%">Nom</th>
                    <th width="40%">URL</th>
                    <th width="8%"></th>
                </tr>
            </thead>
            <tbody>
                <?php
                    if ( $articles ) :
                        foreach ( $articles as $article ) { ?>
                        <tr>
                            <td><input type="text" class="widefat" name="name[]" value="<?php if(is_array($articles) && isset($article['name']) && isset($article['name']) != '') echo esc_attr( $article['name'] ); ?>" /></td>
                            <td><input type="text" class="widefat" name="url[]" value="<?php if (is_array($articles) && isset($article['url']) && $article['url'] != '') echo esc_attr( $article['url'] ); else echo 'http://'; ?>" /></td>
                            <td><a class="button remove-row" href="#">Supprimer</a></td>
                        </tr>
                <?php   }
                else :
                ?>
                        <tr>
                            <td><input type="text" class="widefat" name="name[]" /></td>
                            <td><input type="text" class="widefat" name="url[]" value="http://" /></td>
                            <td><a class="button remove-row" href="#">Supprimer</a></td>
                        </tr>
    
                <?php endif; ?>
                <tr class="am-empty-row screen-reader-text">
                    <td><input type="text" class="widefat" name="name[]" /></td>
                    <td><input type="text" class="widefat" name="url[]" value="http://" /></td>
                    <td><a class="button remove-row" href="#">Supprimer</a></td>
                </tr>
            </tbody>
        </table>
    
        <p><a id="add-row" href="#" class="components-button is-secondary">Ajouter un article</a></p>
    <?php }
    
    function am_img_uploader_field( $name, $value = '' ) {
        $image = 'Télécharger image';
        $button = 'button';
        $image_size = 'full';
        $display = 'none';
        ?>
        <p><?= _e( '<i>Définir des images pour la galerie d\'images</i>', 'ailomut' );?></p>
        <label>
            <div class="gallery-screenshot clearfix">
                <?php
                {
                    $ids = explode(',', $value);
                    foreach ($ids as $attachment_id) {
                        $img = wp_get_attachment_image_src($attachment_id, 'thumbnail');
                        echo '<div class="screen-thumb"><img src="' . esc_url($img[0]) . '" /></div>';
                    }
                }
                ?>
            </div>
             
            <input id="edit-gallery" class="button upload_gallery_button" type="button"
                   value="<?php esc_html_e('Ajouter / Éditer galerie', 'ailomut') ?>"/>
            <input id="clear-gallery" class="button upload_gallery_button" type="button"
                   value="<?php esc_html_e('Enlever', 'ailomut') ?>"/>
            <input type="hidden" name="<?php echo esc_attr($name); ?>" id="<?php echo esc_attr($name); ?>" class="gallery_values" value="<?php echo esc_attr($value); ?>">
        </label>
    <?php   
    }
    function am_experience_gallery($post) {
        wp_nonce_field( 'save_feat_gallery', 'am_feat_gallery_nonce' );
        $meta_key = 'gallery_experience';
        echo am_img_uploader_field( $meta_key, get_post_meta($post->ID, $meta_key, true) );
    }
    
    function am_formation_resume($post){
        $type_formation = get_post_meta($post->ID,'_type_formation',true);
        $string = '<div class="components-flex"><label for="formation_meta" class="components-base-control__label">Type de formation :</label>';
        $string .= '<input id="formation_meta" type="text" class="components-text-control__input" name="type_formation" value="'. $type_formation .'" /></div>';
    
        $value_label = get_post_meta($post->ID,'_value_label',true);
        $string .= '<div class="components-flex"><label for="label_meta" class="components-base-control__label">Label :</label>';
        $string .= '<input id="label_meta" type="text" class="components-text-control__input" name="value_label" value="'. $value_label .'" /></div>';
    
        echo $string;
    }
    
    function am_testimonial_author($post){
        $date_testimonial = get_post_meta($post->ID,'_date_testimonial',true);
        $string = '<div class="components-flex"><label for="date_meta" class="components-base-control__label">Date d\'édition :</label>';
        $string .= '<input id="date_meta" type="date" class="components-text-control__input" name="date_testimonial" value="'. $date_testimonial .'" /></div>';
    
        $author_testimonial = get_post_meta($post->ID,'_author_testimonial',true);
        $string .= '<div class="components-flex"><label for="author_meta" class="components-base-control__label">Auteur :</label>';
        $string .= '<input id="author_meta" type="text" class="components-text-control__input" name="author_testimonial" value="'. $author_testimonial .'" /></div>';
    
        $website_author = get_post_meta($post->ID,'_website_author',true);
        $string .= '<div class="components-flex"><label for="link_website_meta" class="components-base-control__label">Site de l\'auteur:</label>';
        $string .= '<input id="link_website_meta" type="url" class="components-text-control__input" name="website_author" value="'. $website_author .'" /></div>';
    
        echo $string;
    }
    
    function am_snippet_resume($post){
        $date_snippet = get_post_meta($post->ID,'_date_snippet',true);
        $string = '<div class="components-flex"><label for="date_snippet_meta" class="components-base-control__label">Réalisation :</label>';
        $string .= '<input id="date_snippet_meta" type="text" class="components-text-control__input" name="date_snippet" value="'. $date_snippet .'" /></div>';
    
        $link_snippet = get_post_meta($post->ID,'_link_snippet',true);
        $string .= '<div class="components-flex"><label for="link_snippet_meta" class="components-base-control__label">Lien de partage :</label>';
        $string .= '<input id="link_snippet_meta" type="text" class="components-text-control__input" name="link_snippet" value="'. $link_snippet .'" /></div>';
    
        echo $string;
    }
    
    function am_page_slogan($post){
        wp_nonce_field( 'save_slogan', 'am_slogan_nonce' );
        $slogan = get_post_meta($post->ID,'_slogan_page',true);
        $string = '<div class="components-flex"><label for="slogan_meta" class="components-base-control__label">Description :</label>';
        $string .= '<input id="slogan_meta" type="text" class="components-text-control__input" name="slogan_page" value="'. $slogan .'" /></div>';
        
        echo $string;
    }
    
    function save_metabox($post_id){
    
        // Sauvegarde de la méta box "Propriété de la prestation"
        if(isset($_POST['date_work'])){
            update_post_meta($post_id, '_date_work', esc_html($_POST['date_work']));
        }
        if(isset($_POST['customer_work'])){
            update_post_meta($post_id, '_customer_work', esc_html($_POST['customer_work']));
        }
        if(isset($_POST['link_work'])){
            update_post_meta($post_id, '_link_work', esc_url($_POST['link_work']));
        }
    
        // Sauvegarde de la méta box "Résumé de l'expérience"
        if(isset($_POST['date_experience'])){
            update_post_meta($post_id, '_date_experience', $_POST['date_experience']);
        }
        if(isset($_POST['end_activity'])){
            update_post_meta($post_id, '_end_activity', $_POST['end_activity']);
        }
        if(isset($_POST['speciality_experience'])){
            update_post_meta($post_id, '_speciality_experience', esc_html($_POST['speciality_experience']));
        }
        if(isset($_POST['contract_experience'])){
            update_post_meta($post_id, '_contract_experience', esc_html($_POST['contract_experience']));
        }
        if(isset($_POST['location_experience'])){
            update_post_meta($post_id, '_location_experience', esc_html($_POST['location_experience']));
        }
        if(isset($_POST['during_experience'])){
            update_post_meta($post_id, '_during_experience', esc_html($_POST['during_experience']));
        }
    
        // Sauvegarde de la méta box "Articles" (Dans expérience)
        if (! isset( $_POST['am_repeatable_meta_box_nonce'] ) || ! wp_verify_nonce( $_POST['am_repeatable_meta_box_nonce'], 'save_feat_articles' ) ) return;
        //if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
        //if (!current_user_can('edit_post', $post_id)) return;
        
        $old = get_post_meta($post_id, '_articles_experience', true);
        $new = array();
        $names = $_POST['name'];
        $urls = $_POST['url'];
        $count = count( $names );
        for ( $i = 0; $i < $count; $i++ ) {
            if ( $names[$i] != '' ) :
                $new[$i]['name'] = stripslashes( strip_tags( $names[$i] ) );
                if ( $urls[$i] == 'http://' )
                $new[$i]['url'] = '';
                else
                $new[$i]['url'] = stripslashes( $urls[$i] ); // and however you want to sanitize
            endif;
        }
        if ( !empty( $new ) && $new != $old )
            update_post_meta( $post_id, '_articles_experience', $new );
        elseif ( empty($new) && $old )
            delete_post_meta( $post_id, '_articles_experience', $old );
    
        // Sauvegarde de la méta box "Description de l'expérience"
        if(isset($_POST['description_experience'])){
            update_post_meta($post_id, '_description_experience', esc_html($_POST['description_experience']));
        }
    
        // Sauvegarde la méta box "Galerie" (Dans expérience)
        if ( !isset( $_POST['am_feat_gallery_nonce'] ) ) { return $post_id; }
        if ( !wp_verify_nonce( $_POST['am_feat_gallery_nonce'], 'save_feat_gallery') ) { return $post_id; }
        if ( isset( $_POST[ 'gallery_experience' ] ) ) { update_post_meta( $post_id, 'gallery_experience', esc_attr($_POST['gallery_experience']) );
        } 
        else { update_post_meta( $post_id, 'gallery_experience', '' ); }
    
        // Sauvegarde de la méta box "Résumé de la formation"
        if(isset($_POST['type_formation'])){
            update_post_meta($post_id, '_type_formation', esc_html($_POST['type_formation']));
        }
        if(isset($_POST['getting_degree'])){
            update_post_meta($post_id, '_getting_degree', esc_html($_POST['getting_degree']));
        }
        if(isset($_POST['getting_label'])){
            update_post_meta($post_id, '_getting_label', esc_html($_POST['getting_label']));
        }
        if(isset($_POST['value_label'])){
            update_post_meta($post_id, '_value_label', esc_html($_POST['value_label']));
        }
    
        // Sauvegarde de la méta box "Auteur témoignage" (rubrique témoignages)
        if(isset($_POST['date_testimonial'])){
            update_post_meta($post_id, '_date_testimonial', $_POST['date_testimonial']);
        }
        if(isset($_POST['author_testimonial'])){
            update_post_meta($post_id, '_author_testimonial', esc_html($_POST['author_testimonial']));
        }
        if(isset($_POST['website_author'])){
            update_post_meta($post_id, '_website_author', esc_url($_POST['website_author']));
        }
    
        // Sauvegarde de la méta box "Infos snippet" (rubrique snippets)
        if(isset($_POST['date_snippet'])){
            update_post_meta($post_id, '_date_snippet', esc_html($_POST['date_snippet']));
        }
        if(isset($_POST['link_snippet'])){
            update_post_meta($post_id, '_link_snippet', esc_html($_POST['link_snippet']));
        }
    
        // Sauvegarde de la méta box de description d'une page
        if (!wp_verify_nonce( $_POST['am_slogan_nonce'], 'save_slogan' )) return;
        if(isset($_POST['slogan_page'])){
            update_post_meta($post_id, '_slogan_page', esc_html($_POST['slogan_page']));
        }
    
    }
    
    add_action('save_post','save_metabox');
    add_action('add_meta_boxes','init_metabox');

     

     

    Hola

    • Ce sujet a été modifié le il y a 1 semaine et 1 jour par mumu51.
    #2402247
    mathieu42
    Participant
    Maître WordPress
    1143 contributions

    dans le fonction « save_metabox » vous testez plusieurs nonce alors que suivant le type d’objet, il y a surement 1 seul nonce existant à chaque fois.

    je vous conseille de séparer chaque type d’objet dans un fichier séparé, cela vous aider à mieux voir la structure de votre code. dans les grands projets je vais même jusqu’à créer un répertoire par type et dans ce répertoire je sépare le code avec 1 fichier pour l’affichage de la liste, 1 fichier pour l’affichage d’un objet, 1 fichier pour l’enregistrement de l’objet, etc.

    #2402431
    mumu51
    Participant
    Padawan WordPress
    97 contributions

    Bonjour,

    Merci pour votre retour, effectivement, le problème venait bien des nonce que je n’ai pas bien déclaré pour tous.
    J’ai suivi votre conseil et j’ai créé une class différente pour chaque metabox et pour l’instant ça marche… J’ai toujours des surprises avec WordPress, ce qui marchait hier, ne fonctionne plus le lendemain, je ne sais absolument pas pourquoi ^^’

3 sujets de 1 à 3 (sur un total de 3)
  • Vous devez être connecté pour répondre à ce sujet.