Come ottenere il valore selezionato da wp_dropdown_categories

21 dic 2014, 22:09:18
Visualizzazioni: 13.9K
Voti: 4

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 );
6
Commenti

Cosa vuoi fare con il valore? Come in HTML il valore selezionato è disponibile come selected all'interno del option

Sven Sven
21 dic 2014 22:57:12

Voglio creare un loop di categorie basato sulla categoria scelta

Jamie Jamie
21 dic 2014 23:50:09

Forse è meglio usare get_categories() per iterare attraverso un array di categorie invece :)

Sven Sven
21 dic 2014 23:58:15

La tua 100esima domanda :)

kaiser kaiser
22 dic 2014 00:55:31

puoi pubblicare un frammento di codice per mostrare cosa intendi Sven? Non sono riuscito a farlo funzionare

Jamie Jamie
22 dic 2014 04:09:15

Peter, questo non è assolutamente un duplicato di quella domanda. Non ho nemmeno ancora un loop nel mio codice. La risposta corretta a questa domanda non è nemmeno lontanamente vicina a quanto pubblicato nell'altra domanda. Ho trovato la risposta a questa domanda e la pubblicherò quando avrò tutto il codice funzionante. Non sto usando affatto get_tags o get_categories in questa fase. Tutto ciò che dovevo fare per ottenere i valori era aggiungere alcune opzioni alla funzione wp_dropdown_categories. Poi ho potuto fare un print_r($instance) e vedere che i miei valori erano lì. Potevo anche trovarli nel database. Quindi ora so come ottenere i valori.

Jamie Jamie
22 dic 2014 15:59:00
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 1
1

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! :)

22 dic 2014 22:55:10
Commenti

Grazie Sven, il mio problema principale era che non ero sicuro di come scrivere la select in php mentre ottenevo i valori dal database. Ciò che mi sorprende davvero è la mancanza di informazioni nel codex.

Jamie Jamie
23 dic 2014 02:13:32