Come ottenere il valore selezionato da wp_dropdown_categories
Sto creando un widget e ho utilizzato la funzione wp_dropdown_categories() in quel widget. Quello che non riesco a capire è come ottenere il valore selezionato dal dropdown.
In quale variabile è memorizzato il valore selezionato?
$args = array('show_option_none' => 'Nessuna Categoria', 'hide_empty' => 0);
wp_dropdown_categories( $args );
Possiamo ottenere le categorie tramite la funzione get_categories() (che restituirà le stesse categorie della funzione wp_dropdown_categories()), ma come array e senza il markup.
Poiché il valore viene restituito come array, possiamo iterare attraverso le categorie e generare l'HTML manualmente.
Generalmente, punteremmo a una struttura come questa:
<select name="categories">
<option value="1">Categoria 1</option>
<option value="2">Categoria 2</option>
<option value="3">Categoria 3</option>
</select>
Quindi genereremo la struttura sopra tramite PHP iterando attraverso l'array $categories
:
echo '<select name="categories">';
// Ottieni le categorie come array
$categories = get_categories( $args );
foreach ( $categories as $category ) :
echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
endforeach;
echo '</select>';
Sentiti libero di modificare la funzione tramite i parametri $args
(vedi Codex per riferimento).
Ora dobbiamo solo aggiungere l'attributo selected
all'interno del tag <option>
, quindi lo aggiungeremo tramite una breve istruzione if per confrontare l'ID della categoria corrente $category->term_id
con quello salvato nel database $stored_category_id
:
$stored_category_id = 10; // Questo è il valore dal database
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
Ecco fatto! Il tuo snippet completo (magari con un'opzione predefinita all'inizio) dovrebbe ora apparire così:
echo '<select name="categories">';
// Aggiungi un'opzione personalizzata come predefinita
echo '<option>' . __('Nessuna Categoria', 'text-domain') . '</option>';
// Ottieni le categorie come array
$categories = get_categories( $args );
foreach ( $categories as $category ) :
// Verifica se l'ID del termine corrente è uguale all'ID del termine salvato nel database
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
echo '<option value="' . $category->term_id . '" ' . $selected . '>' . $category->name . '</option>';
endforeach;
echo '</select>';
Buona fortuna! :)
