cum să obții valoarea selectată din wp_dropdown_categories
Eu creez un widget și am folosit funcția wp_dropdown_categories() în acel widget. Ceea ce nu reușesc să înțeleg este cum să obțin valoarea selectată din dropdown.
În ce variabilă este stocată valoarea selectată?
$args = array('show_option_none' => 'Fără Categorie','hide_empty' => 0);
wp_dropdown_categories( $args );
Putem obține categoriile prin funcția get_categories() (care va returna aceleași categorii ca funcția wp_dropdown_categories()), dar sub formă de array și fără markup.
Deoarece valoarea este returnată ca array, putem parcurge categoriile și genera HTML-ul manual.
De obicei, am dori o structură de genul următor:
<select name="categories">
<option value="1">Category 1</option>
<option value="2">Category 2</option>
<option value="3">Category 3</option>
</select>
Așadar, vom genera structura de mai sus prin PHP parcurgând array-ul $categories
:
echo '<select name="categories">';
// Obține categorii ca array
$categories = get_categories( $args );
foreach ( $categories as $category ) :
echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
endforeach;
echo '</select>';
Simțiți-vă liber să modificați funcția prin parametrii $args
(consultați Codex pentru referință).
Acum trebuie doar să adăugăm atributul selected
în cadrul <option>
, așa că vom adăuga acest lucru printr-o scurtă instrucțiune if pentru a compara $category->term_id
curent cu cel salvat în baza de date $stored_category_id
:
$stored_category_id = 10; // Aceasta este valoarea din baza de date
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
Și asta e tot! Snippet-ul dvs. complet (poate cu o opțiune implicită la început) ar trebui să arate acum cam așa:
echo '<select name="categories">';
// Adaugă opțiune personalizată ca implicită
echo '<option>' . __('Fără Categorie', 'text-domain') . '</option>';
// Obține categorii ca array
$categories = get_categories( $args );
foreach ( $categories as $category ) :
// Verifică dacă ID-ul termenului curent este egal cu ID-ul termenului stocat în baza de date
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
echo '<option value="' . $category->term_id . '" ' . $selected . '>' . $category->name . '</option>';
endforeach;
echo '</select>';
Succes! :)
