WordPress : Liste des catégories dans la page des options de thème
J’essaie de créer une liste de catégories à sélection multiple dans une page d’options de thème et tout s’affiche, mais lorsque j’enregistre les options, seule la dernière option de la zone de sélection multiple sélectionnée est enregistrée dans la base de données.
Est-ce que quelqu’un sait ce que je fais mal peut-être?
Voici des morceaux du code que j’utilise actuellement :
<?php
$themename_themename = "themename";
$themename_shortname = "themename";
$themename_option_group = $themename_shortname.'_theme_option_group';
$themename_option_name = $themename_shortname.'_theme_options';
// WordPress Categories via an Array
$wp_cats = array();
$categories = get_categories('hide_empty=0&orderby=name');
foreach ($categories as $category_list) {
$wp_cats[$category_list->cat_ID] = $category_list->cat_name;
}
$categories_tmp = array_unshift($wp_cats, "Select a category:");
// Create theme options
global $themename_settings;
$themename_settings = array (
// Multi-select
array( "name" => __( 'Cat List','themename'), 'id' => $themename_shortname.'_list_cats', 'type' => 'multi-select',
"desc" => __( 'Multi Select Unorderd Lists in content area.','themename'),
'std' => '',
"value" => $wp_cats ),
);
function themename_settings_page() {
case 'multi-select': // Multi-select ?>
<div class="options_input options_select">
<div class="options_desc"><?php echo $value['desc']; ?></div>
<span class="labels"><label for="<?php echo $themename_option_name.'['.$valueid.']'; ?>"><?php echo $value['name']; ?></label></span>
<select name="<?php echo $themename_option_name.'['.$valueid.']'; ?>" id="<?php echo $themename_option_name.'['.$valueid.']'; ?>" multiple="multiple" style="height:150px; min-width: 200px;">
<?php
$multi_setting = $options[$valueid];
foreach ($value['value'] as $category_list) {
?>
<option value="<?php echo $category_list ?>" <?php if($multi_setting != '') { selected($options[$valueid] == $category_list );} else { selected($options[$valueid] == $value['std']);} ?>><?php echo $category_list; ?></option>
<?php } ?>
</select>
</div>
<?php
break;
} // --themename_settings_page
Voici une température. capture d’écran de ce qui se passe : Capture d’écran
Toute aide serait très appréciée.
Solution n°1 trouvée
Merci pour l’aide Devin, c’est la réponse pour ce qui a fini par fonctionner pour moi au cas où quelqu’un d’autre tomberait dessus.
<?php
case 'multi-select': // Multi-select ?>
<div class="options_input options_select">
<div class="options_desc"><?php echo $value['desc']; ?></div>
<span class="labels"><label for="<?php echo $themename_option_name.'['.$valueid.']'; ?>"><?php echo $value['name']; ?></label></span>
<select name="themename_theme_options[themename_content_bullet_cats][]" id="<?php echo $themename_option_name.'['.$valueid.']'; ?>" multiple="multiple" size="8">
<?php /* Get the list of categories */
$cats_selected = $options[$valueid];
$categories = get_categories();
foreach ( $categories as $category) :
?>
<option value="<?php echo $category->cat_ID; ?>" <?php if ( $cats_selected && in_array( $category->cat_ID, $cats_selected ) ) { echo 'selected="selected"'; }?>><?php echo $category->cat_name; ?></option>
<?php endforeach; ?>
</select>
</div>
<?php
break;
Solution n°2 trouvée
Il peut s’agir d’un problème HTML. Pour une sélection multiple, le nom de doit se terminer par « [] », pour signifier un tableau. Essayez donc de changer :
<select name="<?php echo $themename_option_name.'['.$valueid.']'; ?>" id="<?php echo $themename_option_name.'['.$valueid.']'; ?>" multiple="multiple" style="height:150px; min-width: 200px;">
à
<select name="<?php echo $themename_option_name.'['.$valueid.']'; ?>[]" id="<?php echo $themename_option_name.'['.$valueid.']'; ?>" multiple="multiple" style="height:150px; min-width: 200px;">
Vous devriez donc vous retrouver avec :
<select name="hurst_theme_options[hurst_content_bullet_cats][]" id="...
0 commentaire