WP_editor et custom post type : modifications non sauvées (Créer un compte)

  • Statut : non résolu
15 sujets de 1 à 15 (sur un total de 19)
  • Auteur
    Messages
  • #509713
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    Bonjour,

    Ma configuration WP actuelle
    – Version de WordPress : 4.1.1
    – Version de PHP/MySQL :
    – Thème utilisé : le mien
    – Extensions en place : aucune
    – Nom de l’hebergeur : STRATO
    – Adresse du site :

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

    Bonjour,

    J’utilise wp_editor à l’interieur d’un CUSTOM POST TYPE.
    J’ai un texte, qui reste dans la fenêtre de l’éditeur. Mais si je fais des modification sur ce texte et que je mets à jour, et bien les modifications ne sont pas sauvegardées.

    Voici ce que je fais avec ce WP_editor :

    add_action(‘admin_init’, ‘evenements_admin_init’); //function pour ajouter des champs personnalisés

    function evenements_admin_init()
    { //initialisation des champs spécifiques
    add_meta_box(« nom_evenement », « DETAILS DE L’ÉVÈNEMENT « , « details_evenement », « evenements », « normal », « core »);
    }


    function details_evenement()
    {
    global $post;

    // Details du evenement
    $custom_information = get_post_meta( $post->ID);
    $information_evenement = $custom_information[« information_evenement »][0];
    //$information_evenement = get_post_meta( $post->ID, ‘_event_id1’, true);

    ?>
    <label for="information_evenement"> Détails de l’évènement      : </label>
    <?php
    $settings = array(
    'textarea_name' => ‘event_id1’,
    ‘textarea_rows’ => ‘6’,
    ‘editor_css’ => ‘<style>#wp-event_id1-wrap { width:50%; left: 170px; } </style>‘,
    ‘media_buttons’ => false
    );
    wp_editor($information_evenement, ‘event_id1’, $settings );

    }


    add_action(‘save_post’, ‘save_custom_evenement’); //function pour la sauvegarde de nos champs personnalisés


    function save_custom_evenement()
    { //sauvegarde des champs spécifiques
    global $post;
    if (defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE)
    { // fonction pour éviter le vidage des champs personnalisés lors de la sauvegarde automatique
    return $postID;
    }
    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_ID, « event_id1 », $_POST[« event_id1 »]);
    }
    }

    ALors pour sauver j’ai essayé plusieurs choses comme

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_ID, « $information_evenement », $_POST[« event_id1 »]);
    }

    ou encore

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_ID, « _event_id1 », $_POST[« event_id1 »]);
    }

    Mais cela ne sauve pas les modifications.

    Je voudrais savoir si vous avez vu quelque chose qui pourrait me débloquer car là je ne vois plus du tout ….
    Surement encore une toute petite bêtise de ma part que je ne vois pas…. comme d’habitude quoi …

    merci pour votre aide et vos conseils !
    Timama

    #833400
    didier07
    Participant
    Maître WordPress
    1964 contributions

    $post->ID ?

    #833401
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    merci pour ta réponse didier07.

    Alors, j’ai essayé (je me suis embrouillée aussi …😉 )

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « event_id1 », $_POST[« event_id1 »]);
    }

    (pareil avec les 2 autres code pour sauver, au cas où) mais ça ne sauvegarde pas les modifications.

    Je trouve bizarre le fait que ça garde toujours le même texte ….

    #833402
    didier07
    Participant
    Maître WordPress
    1964 contributions

    if ( isset ( $_POST ) ) {
    update_post_meta( $post_id, « event_id1 », $_POST[« event_id1 »]);
    }

    #833403
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    merci Didier07.

    J’ai essayé avec $post_id et d’autre chose car je me demande si j’ai bien compris au final ce $post_id.
    Si je ne met pas du tout de update_post_meta, ça donne le même résultat : les modifs ne sont pas sauvées (bon là c’est normal forcement, mais avec mes update, j’obtiens pareil…)

    Ce qui est sûr c’est que pour un editeur dans une simple metabox, dans mon programme, le code suivant fonctionne :

    add_meta_box(‘id_texte1’, ‘Texte n°1’, ‘metabox_Editor_1’, ‘page’, ‘normal’, ‘core’);

    function metabox_Editor_1( $post ) {
    $texte1 = get_post_meta( $post->ID, ‘content-id1’, true );
    wp_editor($texte1, ‘content-id1’ );
    }

    if ( isset ( $_POST[‘content-id1’] ) ) {
    update_post_meta( $post_ID, ‘content-id1’, $_POST[‘content-id1’]);
    }

    Mais dans le cas précis ici de mon problème, le wp_editor est inclu dans un CUSTOM POST TYPE, et là je n’y arrive pas.
    J’ai essayé de reprendre la même technique que pour les autres metabox du CPT comme la suivante qui fonctionne :

    // Preview de l’évènement
    $custom_preview = get_post_custom($post->ID);
    $preview_evenement = $custom_preview[« preview_evenement »][0];
    ?>
    <label for="preview_evenement"> Preview de l’évènement    : </label>
    <input size="80" type="text" value=" » name= »preview_evenement »/>
    </br>


    if(isset($_POST[‘preview_evenement’])){
    update_post_meta($post->ID, « preview_evenement », esc_html($_POST[« preview_evenement »]));
    }

    mais cela ne fonctionne pas avec le wp_editor. DU coup, je ne sais pas (après avoir tenté) si c’est un pb avec $post->ID

    #833404
    didier07
    Participant
    Maître WordPress
    1964 contributions

    Tu n’as pas compris la logique.

    add_meta_box(‘id_texte1’, ‘Texte n°1’, ‘metabox_Editor_1’, ‘page’, ‘normal’, ‘core’);

    function metabox_Editor_1( $post ) {
    $texte1 = get_post_meta( $post->ID, ‘content-id1’, true );
    wp_editor($texte1, ‘content-id1’ );
    }

    T’ajoute la boite dans l’admin de WP

    Tu lance tes actions supplémentaires AU MOMENT de la sauvegarde du post
    add_action( ‘save_post’, ‘save_meta’);
    function save_meta( $post ) {
    if ( isset ( $_POST[‘content-id1’] ) ) {
    update_post_meta( $post_ID, ‘content-id1’, $_POST[‘content-id1’]);
    }

    #833405
    didier07
    Participant
    Maître WordPress
    1964 contributions

    PS: Il manque une } pour la fonction save_meta

    #833406
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    merci Didier07 de m’aider 😉

    ah oui, pardon Didier07, je met bien aussi :

    add_action(‘save_post’,’save_metaboxes’);
    ou
    add_action(‘save_post’, ‘save_custom_evenement’);

    avant les update….. je ne met pas tout le code et j’ai oublié de recopier ça.
    Le code est long car j’ai plusieurs éléments à chaque fois… humm interférence peut être?
    Je vais essayer de ne laisser que le wp_editor pour voir si il fonctionne seul…. aller…encore un test

    #833407
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    hummm non, si je met le wp_editor tout seul cela ne change rien … cela ne sauve pas les modifications… bon au cas où, voici le code entier (fichier evenements appelé dans functions.php via include(‘evenements.php’)😉

    La SEULE partie qui ne fonctionne pas c’est donc la partie « informations evenements » (ligne 205) utilisant le wp_editor (avant j’utilisais un textarea simple mais je voulais de la mise en forme en plus). Pour cette partie, il y a donc un texte qui ne se modifie pas (les modifs ne sont pas sauvées à la mise à jour)

     __(‘Evenements’, ‘post type general name’),
    ‘singular_name’ => __(‘Evenement’, ‘post type singular name’),
    ‘add_new’ => __(‘Add New’, ‘Evenements’),
    ‘add_new_item’ => __(‘Add New Evenements’),
    ‘edit_item’ => __(‘Edit Evenements’),
    ‘new_item’ => __(‘New Evenements’),
    ‘view_item’ => __(‘View Evenements’),
    ‘search_items’ => __(‘Search Evenements’),
    ‘not_found’ => __(‘No Evenements found’),
    ‘not_found_in_trash’ => __(‘No Evenements found in Trash’),
    ‘parent_item_colon’ =>  »,
    );

    $args = array(
    ‘label’ => __(‘Evenements’),
    ‘singular_label’ => __(‘Evenement’),
    ‘public’ => true,
    ‘show_ui’ => true,
    ‘_builtin’ => false, // It’s a custom post type, not built in
    ‘_edit_link’ => ‘post.php?post=%d’,
    ‘capability_type’ => ‘post’,
    ‘hierarchical’ => false,
    ‘rewrite’ => array(« slug » => « evenements »),
    ‘query_var’ => « evenements », // This goes to the WP_Query schema
    ‘supports’ => array(‘title’,’thumbnail’) //titre + zone de texte + champs personnalisés + miniature valeur possible : ‘title’,’editor’,’author’,’thumbnail’,’excerpt’
    );

    register_post_type( ‘evenements’ , $args ); // enregistrement de l’entité evenement basé sur les arguments ci-dessus

    }

    add_action(« manage_posts_custom_column », « evenements_custom_columns »);
    add_filter(« manage_evenements_posts_columns », « evenements_edit_columns »);

    function evenements_edit_columns($columns){
    $columns = array(
    « cb » => «  »,
    « title » => « Titre »,
    « nom_evenement » => « Evenement »,
    « date_evenement » => « Date de l’evenement »,
    « preview_evenement » => « Preview »,
    );
    return $columns;
    }


    function evenements_custom_columns($column){
    global $post;
    $custom = get_post_custom();

    switch ($column) {
    case « nom_evenement »:
    echo $custom[« nom_evenement »][0];
    break;

    case « date_evenement »:
    echo $custom[« date_evenement »][0];
    break;

    case « preview_evenement »:
    echo $custom[« preview_evenement »][0];
    break;
    }
    }


    add_filter(« manage_edit-evenements_sortable_columns », « evenements_date_column_register_sortable »);
    add_filter(« request », « evenements_date_column_orderby » );

    function evenements_date_column_register_sortable( $columns ) {
    $columns[‘date_evenement’] = ‘date_evenement’;
    return $columns;
    }

    function evenements_date_column_orderby( $vars ) {
    if ( isset( $vars[‘orderby’] ) && ‘date_evenement’ == $vars[‘orderby’] ) {
    $vars = array_merge( $vars, array(
    ‘meta_key’ => ‘date_evenement’,
    ‘orderby’ => ‘meta_value_num’
    ) );
    }
    return $vars;
    }



    add_action(‘admin_init’, ‘evenements_admin_init’); //function pour ajouter des champs personnalisés

    function evenements_admin_init()
    { //initialisation des champs spécifiques
    add_meta_box(« nom_evenement », « DETAILS DE L’ÉVÈNEMENT « , « details_evenement », « evenements », « normal », « core »);
    }


    function details_evenement()
    {
    global $post;

    // Nom de l’évènement
    $custom_nom = get_post_custom($post->ID);
    $nom_evenement = $custom_nom[« nom_evenement »][0];
    ?>
    </br> </br>
    <label for="nom_evenement"> Nom de l’évènement          : </label>
    <input size="80" type="text" value=" » name= »nom_evenement »/>
    </br> </br></br>

    ID);
    $date_evenement = $custom_date[« date_evenement »][0];
    ?>
    <label for="date_evenement"> Date de l’évènement          : </label>
    <input type="text" name="date_evenement" id="date_evenement" value=" » />
    </br> </br></br>


    ID);
    $preview_evenement = $custom_preview[« preview_evenement »][0];
    ?>
    <label for="preview_evenement"> Preview de l’évènement    : </label>
    <input size="80" type="text" value=" » name= »preview_evenement »/>
    </br>

    </br> </br></br>



    ID, ‘_event_id1’, true); // ne fonctionne pas

    $custom_information = get_post_meta($post->ID);
    $information_evenement = $custom_information[« information_evenement »][0];
    //$information_evenement = get_post_meta($post->ID, ‘_event_id1’, true);

    ?>
    <label for="information_evenement"> Détails de l’évènement      : </label>
    ‘event_id1’,
    ‘textarea_rows’ => ‘6’,
    ‘editor_css’ => ‘#wp-event_id1-wrap { width:50%; left: 170px; } ‘,
    ‘media_buttons’ => false
    );
    wp_editor($information_evenement, ‘event_id1’, $settings );


    ?>

    </br>


    ID, ‘url_docu’, true );
    ?>
    </br></br>
    <label for="url_documentation_evenement">Descriptif de l’évènement : </label>
    <input id="url_documentation_evenement" style="width: 450px;" type="text" name="url_documentation_evenement" value=" » />
    <a href="#" class="button customaddmediaevent"> Télécharger le document pdf </a>
    </br>

    </br></br>


    ID);
    $affichage_evenement = $custom_affichage[« affichage_evenement »][0];
    ?>
    </br>
    <label for="affichage_evenement"> Paramètre affichage           : </label>
    <input size="10" type="text" value=" » name= »affichage_evenement »/>
    </br>
    <?php
    echo '= 0 si vous ne voulez pas l'affichage de cet évènement </br> = 1 si vous voulez l’affichage de cet évènement’ ;
    ?>
    </br></br></br></br></br>

    <?php
    echo '<u><strong>PARAMETRES D’ETAT de l’EVENEMENT </strong></u></br> ‘;
    echo ‘Soit « inscription en ligne », soit « complet », soit « compte-rendu »</br>‘;
    echo ‘Mettre 1 dans l’état choisi et 0 dans les 2 autres</br>‘;
    echo ‘Mettre 0 partout si il n’y a rien à mettre </br>‘;
    ?>
    </br></br>
    ID);
    $inscriptionenligne_evenement = $custom_inscriptionenligne[« inscriptionenligne_evenement »][0];
    ?>
    <label for="inscriptionenligne_evenement"> Paramètre inscriptionenligne : </label>
    <input size="10" type="text" value=" » name= »inscriptionenligne_evenement »/>
    </br>

    ID);
    $complet_evenement = $custom_complet[« complet_evenement »][0];
    ?>
    </br>
    <label for="complet_evenement"> Paramètre complet                   : </label>
    <input size="10" type="text" value=" » name= »complet_evenement »/>
    </br>

    ID);
    $compterendu_evenement = $custom_compterendu[« compterendu_evenement »][0];
    ?>
    </br>
    <label for="compterendu_evenement"> Paramètre compterendu         : </label>
    <input size="10" type="text" value=" » name= »compterendu_evenement »/>

    ID, ‘url_compterendu’, true );
    ?>
    <input id="url_documentation_compterendu" style="width: 250px;" type="text" name="url_documentation_compterendu" value=" » />
    <a href="#" class="button customaddmediac"> Télécharger le compte-rendu en pdf </a>
    </br></br></br></br></br>


    <?php
    echo '<u><strong>PARAMETRES D’AFFICHAGE SELON LES PAGES</strong></u></br> ‘;
    echo ‘Ces paramètres ne sont pas à changer. Le programme le fait automatiquement. Ils sont là à titre d’information.</br>‘;
    echo ‘L’évènement s’affichera sur chaque page où le paramètre correspondant est égal à 1.</br>‘;
    ?>
    </br></br>
    ID);
    $accueil_evenement = $custom_accueil[« accueil_evenement »][0];
    ?>
    <label for="accueil_evenement"> Paramètre accueil : </label>
    <input size="10" type="text" value=" » name= »accueil_evenement »/>
    </br>
    ID);
    $activite_evenement = $custom_activite[« activite_evenement »][0];
    ?>
    </br>
    <label for="activite_evenement"> Paramètre activite : </label>
    <input size="10" type="text" value=" » name= »activite_evenement »/>
    </br>
    ID);
    $archive_evenement = $custom_archive[« archive_evenement »][0];
    ?>
    </br>
    <label for="archive_evenement"> Paramètre archive : </label>
    <input size="10" type="text" value=" » name= »archive_evenement »/>
    </br>
    ID, « nom_evenement », esc_html($_POST[« nom_evenement »]));
    }
    if(isset($_POST[‘preview_evenement’])){
    update_post_meta($post->ID, « preview_evenement », esc_html($_POST[« preview_evenement »]));
    }
    if(isset($_POST[‘date_evenement’])){
    update_post_meta($post->ID, « date_evenement », $_POST[« date_evenement »]);
    }

    /* if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « event_id1 », $_POST[« event_id1 »]);
    }
    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « $information_evenement », $_POST[« event_id1 »]);
    }
    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « _event_id1 », $_POST[« event_id1 »]);
    } */


    /* if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_id, « _event_id1 », $_POST[« event_id1 »]);
    }

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta($post_id, « $information_evenement », $_POST[« event_id1 »]);
    }

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_id, « event_id1 », $_POST[« event_id1 »]);
    }


    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( ID, « event_id1 », $_POST[« event_id1 »]);
    }
    */

    if(isset($_POST[‘accueil_evenement’])){
    update_post_meta($post->ID, « accueil_evenement », $_POST[« accueil_evenement »]);
    }
    if(isset($_POST[‘activite_evenement’])){
    update_post_meta($post->ID, « activite_evenement », $_POST[« activite_evenement »]);
    }
    if(isset($_POST[‘archive_evenement’])){
    update_post_meta($post->ID, « archive_evenement », $_POST[« archive_evenement »]);
    }
    if(isset($_POST[‘affichage_evenement’])){
    update_post_meta($post->ID, « affichage_evenement », $_POST[« affichage_evenement »]);
    }
    if(isset($_POST[‘url_documentation_evenement’])){
    // Sanitize user input.
    $meta_data_docu = sanitize_text_field($_POST[‘url_documentation_evenement’]);
    update_post_meta($post->ID, ‘url_docu’, $meta_data_docu );
    }
    if(isset($_POST[‘url_documentation_compterendu’])){
    // Sanitize user input.
    $meta_data_cr = sanitize_text_field($_POST[‘url_documentation_compterendu’]);
    update_post_meta($post->ID, ‘url_compterendu’, $meta_data_cr );
    }

    if(isset($_POST[‘inscriptionenligne_evenement’])){
    update_post_meta($post->ID, « inscriptionenligne_evenement », $_POST[« inscriptionenligne_evenement »]);
    }
    if(isset($_POST[‘complet_evenement’])){
    update_post_meta($post->ID, « complet_evenement », $_POST[« complet_evenement »]);
    }
    if(isset($_POST[‘compterendu_evenement’])){
    update_post_meta($post->ID, « compterendu_evenement », $_POST[« compterendu_evenement »]);
    }

    }

    ?>

    Pour le moment, j’ai donc testé plein de choses (merci Didier07 😉 ) et je teste encore…
    Je regarde la partie update mais c’est peut être pas ça…

    merci si vous avez des remarques

    Timama

    #833408
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    mince, il n’y a pas de numéro de ligne .. oups

    bon, j’ai testé aussi le fait de mettre tout ce qu’il y a dans evenements.php directement dnas functions.php mais cela ne change rien….

    J’ai modifié mon textearea en wp_editor. Le texte qui ne se modifie pas est celui que j’ai entré avec textearea.
    Bon, si je crée un nouvel événement, il n’y a pas de texte par defaut dans le wp_editor et un nouveau texte ne se sauvegarde pas.

    je continue à chercher .. merci si vous avez des remarques

    #833409
    didier07
    Participant
    Maître WordPress
    1964 contributions

    wp_enqueue_script(
    ‘jquery-ui-datepicker’,
    get_bloginfo(‘template_directory’) . ‘/jquery-ui-datepicker/jquery-ui-1.8.11.custom.min.js’,
    array(‘jquery’)
    );

    N’est pas utile car WP a déjà jquery-ui-datepicker comme script référencé par le core

    Il faut lui envoyer au moins l’ID du post dans la fonction de sauvegarde.

    function save_custom_evenement( $post_id )

    #833410
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    ah ? remarque très interessante pour datepicker…. je ne savais pas….. merci beaucoup ….

    alors, j’ai essayé de passé le post dans la fonction de sauvegarde (j’ai essayé avec $post_id, $post, et $post_ID) mais cela ne change rien….
    C’est quand même bizarre que tous les autres textes passant par cette fonction de sauvegarde sont sauvegardés et pas le texte du wp_editor…. c’est le seul qu pose pb….

    #833411
    didier07
    Participant
    Maître WordPress
    1964 contributions

    Est-ce que c’est l’enregistrement qui ne se fait pas ou la récpéreation qui ne marche pas ?
    Regarde dans la table post_meta si le contenu est enregistré ou pas pour commencer 🙂

    #833412
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    bonne remarque. Alors le texte que je modifie se modifie également soit dans la meta_key event_id1 soit dans _event_id1 (ça dépend de quelle ligne de code je teste 😉 ).
    Donc la modification se fait bien dans la db.
    Elle est aussi dans la meta_key information_evenement et là, la modification ne se fait pas.

    Bon, ça c’est du à tous les teste que j’ai fait…. comme j’ai tenté

    /*if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « event_id1 », $_POST[« event_id1 »]);
    }
    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « $information_evenement », $_POST[« event_id1 »]);
    }*/
    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post->ID, « _event_id1 », $_POST[« event_id1 »]);
    }


    /* if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_id, « _event_id1 », $_POST[« event_id1 »]);
    }

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta($post_id, « $information_evenement », $_POST[« event_id1 »]);
    }

    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( $post_id, « event_id1 », $_POST[« event_id1 »]);
    }


    if ( isset ( $_POST[‘event_id1’] ) ) {
    update_post_meta( ID, « event_id1 », $_POST[« event_id1 »]);
    }
    */

    C’est donc la récupération qui ne se fait pas….. si on prend la cas de event_id1 ….
    Il y a un caffouillage entre les meta_key….et leur valeur .. et ce que je mets pour récupérer…

    J’étudie ça… merci beaucoup Didier07 !! merci pour cette piste !!

    #833413
    Timama
    Participant
    Chevalier WordPress
    284 contributions

    voilà !! tu avais raison ! j’ai trouvé !!!

    je met au clair dans 2 secondes…..

15 sujets de 1 à 15 (sur un total de 19)
  • Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.