cum să obții valoarea selectată din wp_dropdown_categories

21 dec. 2014, 22:09:18
Vizualizări: 13.9K
Voturi: 4

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

Ce vrei să faci cu valoarea? În HTML, valoarea selectată este disponibilă ca selected în interiorul option

Sven Sven
21 dec. 2014 22:57:12

Vreau să creez o buclă de categorii bazată pe categoria aleasă

Jamie Jamie
21 dec. 2014 23:50:09

Poate ar fi mai bine să folosești get_categories() pentru a parcurge un array de categorii :)

Sven Sven
21 dec. 2014 23:58:15

A ta 100-a întrebare :)

kaiser kaiser
22 dec. 2014 00:55:31

Poți posta un fragment de cod să arăți ce vrei să spui, Sven? Nu am reușit să fac asta să funcționeze

Jamie Jamie
22 dec. 2014 04:09:15

Peter, aceasta nu este în niciun fel o duplicat a acelei întrebări. Nici măcar nu am o buclă încă în codul meu. Răspunsul corect la această întrebare nu este nici pe departe similar cu cel postat în cealaltă întrebare. Am găsit răspunsul la această întrebare și îl voi posta când voi avea tot codul funcțional. Nu folosesc get_tags sau get_categories deloc în această etapă. Tot ce a trebuit să fac pentru a obține valorile a fost să adaug câteva opțiuni la funcția wp_dropdown_categories. Apoi am putut face un print_r($instance) și să văd că valorile mele sunt acolo. Le-am găsit și în baza de date. Așa că acum știu cum să obțin valorile.

Jamie Jamie
22 dec. 2014 15:59:00
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 1
1

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

22 dec. 2014 22:55:10
Comentarii

Mulțumesc Sven, principala mea problemă a fost că nu eram sigur cum să scriu select-ul în PHP în timp ce preluam valorile din baza de date. Ceea ce mă surprinde cu adevărat este lipsa de informații în codex.

Jamie Jamie
23 dec. 2014 02:13:32