WordPress : Liste des catégories dans la page des options de thème

Publié par Jean-Michel le

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="...
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 *