WordPress : wpalchemy problème de liste déroulante des champs répétitifs

Publié par Jean-Michel le

Je dois autoriser l’utilisateur à sélectionner des éléments de portefeuille dans une liste déroulante, ces éléments de portefeuille sélectionnés seront affichés sur la page d’accueil.

J’ai utilisé la classe wpalchemy pour créer une section répétable contenant une liste déroulante de toutes les pages du portfolio.

Le problème est que chaque fois que je clique sur le bouton de mise à jour, une copie de la liste déroulante est automatiquement ajoutée à la liste répétitive.

<?php while($mb->have_fields_and_multi('col1-project')):
    $mb->the_group_open();
    $mb->the_field('portfolio-list1');
    $args = array (
        'name' => $mb->get_the_name(),
        'id' => $mb->get_the_name(),
        'selected' => html_entity_decode($mb->get_the_value()),
        'post_type' => 'portfolio'
    );
    wp_dropdown_pages($args);
    $mb->the_group_close();
endwhile; ?>

Essentiel : https://gist.github.com/alokjain-lucky/6682775

Solution n°1 trouvée

J’ai changé le code pour parcourir toutes les pages, au lieu d’utiliser wp_dropdown_pages()la fonction.

Voici le nouveau code

<?php while($mb->have_fields_and_multi('col2-project')): ?>
<?php $mb->the_group_open(); ?>

    <p>
        <span>Select Project</span>
        <?php $mb->the_field('project-id-2'); ?>
        <select name="<?php $mb->the_name(); ?>">
            <option value="">None</option>
            <?php
                global $thispost;
                $myposts = get_pages('post_type=portfolio&post_status=publish');

                foreach($myposts as $thispost) :
            ?>
            <option value="<?php echo $thispost->ID; ?>" <?php $mb->the_select_state($thispost->ID);?> ><?php echo get_the_title($thispost->ID); ?></option>

            <?php endforeach; ?>
            <?php setup_postdata($thispost);?>
       </select>
    </p>

<?php $mb->the_group_close(); ?>
<?php endwhile; ?>

Le problème avec le code précédent était qu’il n’y avait pas de valeur vide, donc chaque fois qu’une nouvelle valeur était enregistrée lorsque le bouton de mise à jour était cliqué.

Maintenant, j’ai ajouté <option value="">None</option>comme valeur par défaut.

Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *