web-dev-qa-db-fra.com

comment obtenir la valeur de wp_dropdown_categories

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 );
4
Jamie

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

7
Sven