web-dev-qa-db-fra.com

Rendre les éléments de sélection multiple sélectionnés "sélectionnés"

Je développe un panneau de paramètres de thème pour un nouveau thème wordpress avec une option permettant d’exclure des catégories de la boucle. J'ai réussi à faire fonctionner la fonctionnalité principale, en utilisant une boîte mutilselect et en enregistrant les valeurs sous forme de tableau ...

<?php $cats = get_categories('hide_empty=0&orderby=name'); ?>
<select name="<?php echo $option['id']; ?>[]" id="<?php echo $option['id']; ?>" multiple="multiple">  
    <option value="0">None (don't exclude anything)</option>
    <?php foreach ($cats as $cat_list ) { ?>
        <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( $selected, $cat_list->cat_ID ); ?>><?php echo $cat_list->cat_name; ?></option> 
    <?php } ?>
</select>

cependant, je ne comprends pas comment vérifier chaque élément de la boucle foreach() si sa valeur correspond à une valeur du tableau des valeurs stockées, puis appliquer selected="selected" s'il renvoie la valeur true. Je comprends la fonction selected() wp mais je ne comprends pas comment l'utiliser dans ce cas (valeurs multiples dans la boucle foreach()).

Toute aide sera appréciée, je suis un n00b alors pardonnez-moi si c'est une question stupide :)

1
user8220

Je suppose que votre variable $selected contient un tableau de valeurs pour les éléments actuellement sélectionnés?

Vous ne pouvez pas utiliser selected dans ce cas (avec des cases à sélection multiple) car il ne compare que deux chaînes. Il ne testera pas pour voir si la valeur est dans un tableau. À la place, utilisez une instruction ternaire et in_array()

<?php 
foreach ($cats as $cat_list ) { 
$selected = in_array( $cat_list->cat_ID, $selected ) ? ' selected="selected" ' : '';    
?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php echo $selected; ?>><?php echo $cat_list->cat_name; ?></option> 
<?php } ?>
2
chrisguitarguy

Je sais que c’est une vieille question, mais la réponse n’a toujours pas été donnée à l’aide de la fonction principale ...

C'est ici:

$cats = get_categories('hide_empty=0&orderby=name'); ?>
<select name="<?php echo $option['id']; ?>[]" id="<?php echo $option['id']; ?>" multiple="multiple">
<option value="0">None (don't exclude anything)</option>
<?php foreach ( $cats as $cat_list ) { ?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( true, in_array($cat_list->cat_ID, $selected ) ); ?>><?php echo $cat_list->cat_name; ?></option>
<?php } ?>
</select>

Assurez-vous que $selected est un tableau de cours contenant les identifiants de catégorie sélectionnés.

2
Paolo

Le Q n'est pas stupide. Imo juste la manière extrêmement déroutante c'est documenté. Je me souviens également qu'il y a quelque part dans le codex écrit, que l'utilisation de selected() et de choses similaires est un must (!). Je ne suis pas d'accord.

Quoi qu'il en soit: selected( 'one_value', 'val_to_compare_with', true );

0
kaiser