Je fabrique un widget et j'ai utilisé la fonction wp_dropdown_categories () dans ce widget. Ce que je ne peux pas comprendre, c'est comment obtenir la valeur sélectionnée dans la liste déroulante.
Dans quelle variable la sélection est-elle stockée?
$args = array('show_option_none' => 'No Category','hide_empty' => 0);
wp_dropdown_categories( $args );
Nous pouvons obtenir les catégories via get_categories () function (qui aura les mêmes catégories que wp_dropdown_categories () function), mais sous forme de tableau et sans le balisage.
Comme la valeur est return as array, nous pouvons parcourir les catégories et générer le code HTML nous-même.
Habituellement, nous visons une structure comme celle-ci:
<select name="categories">
<option value="1">Category 1</option>
<option value="2">Category 2</option>
<option value="3">Category 3</option>
</select>
Nous allons donc générer la structure par le haut via PHP en parcourant le tableau $categories
:
echo '<select name="categories">';
// Get categories as array
$categories = get_categories( $args );
foreach ( $categories as $category ) :
echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
endforeach;
echo '</select>';
N'hésitez pas à modifier la fonction via les paramètres $args
(voir Codex pour référence).
Maintenant, nous devrons simplement ajouter l'attribut selected
dans le <option>
, nous allons donc l'ajouter via une instruction if courte pour comparer le $category->term_id
actuel et celui enregistré dans la base de données $stored_category_id
:
$stored_category_id = 10; // This is the value from the database
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
Et c'est tout! Votre extrait de code complet (peut-être avec une option par défaut au début) devrait maintenant ressembler à ceci:
echo '<select name="categories">';
// Add custom option as default
echo '<option>' . __('No Category', 'text-domain') . '</option>';
// Get categories as array
$categories = get_categories( $args );
foreach ( $categories as $category ) :
// Check if current term ID is equal to term ID stored in database
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
echo '<option value="' . $category->term_id . '" ' . $selected . '>' . $category->name . '</option>';
endforeach;
echo '</select>';
Bonne chance! :)