Cómo obtener el valor seleccionado de wp_dropdown_categories

21 dic 2014, 22:09:18
Vistas: 13.9K
Votos: 4

Estoy creando un widget y he utilizado la función wp_dropdown_categories() en ese widget. Lo que no puedo entender es cómo obtener el valor seleccionado del dropdown.

¿En qué variable se almacena el valor seleccionado?

$args = array('show_option_none' => 'Sin Categoría','hide_empty' => 0);
wp_dropdown_categories( $args );
6
Comentarios

¿Qué quieres hacer con el valor? Como en HTML el valor seleccionado está disponible como selected dentro del option

Sven Sven
21 dic 2014 22:57:12

Quiero hacer un bucle de categorías basado en la categoría elegida

Jamie Jamie
21 dic 2014 23:50:09

Quizás sea mejor que uses get_categories() para recorrer un array de categorías :)

Sven Sven
21 dic 2014 23:58:15

Tu pregunta número 100 :)

kaiser kaiser
22 dic 2014 00:55:31

¿Puedes publicar un fragmento de código para mostrar a qué te refieres, Sven? No he podido hacer que esto funcione

Jamie Jamie
22 dic 2014 04:09:15

Peter, esto de ninguna manera es un duplicado de esa pregunta. Ni siquiera tengo un bucle aún en mi código. La respuesta correcta a esta pregunta ni siquiera está cerca de lo que se publicó en esa otra pregunta. He encontrado la respuesta a esta pregunta y la publicaré cuando tenga todo el código funcionando. No estoy usando get_tags ni get_categories en absoluto en esta etapa. Todo lo que necesitaba hacer para obtener los valores fue agregar algunas opciones a la función wp_dropdown_categories. Luego pude hacer un print_r($instance) y ver que mis valores están allí. También pude encontrarlos en la base de datos. Así que ahora sé cómo obtener los valores.

Jamie Jamie
22 dic 2014 15:59:00
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 1
1

Podemos obtener las categorías mediante la función get_categories() (que obtendrá las mismas categorías que la función wp_dropdown_categories()), pero como array y sin el marcado HTML.

Como el valor es devuelto como array, podemos recorrer las categorías y generar el HTML nosotros mismos.

Normalmente, buscaríamos una estructura como esta:

<select name="categories">
  <option value="1">Categoría 1</option>
  <option value="2">Categoría 2</option>
  <option value="3">Categoría 3</option>
</select>

Así que vamos a generar la estructura anterior mediante PHP recorriendo el array $categories:

echo '<select name="categories">';

  // Obtener categorías como array
  $categories = get_categories( $args );
  foreach ( $categories as $category ) :

    echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';

  endforeach;

echo '</select>';

Siéntete libre de modificar la función mediante los parámetros $args (consulta la Codex como referencia).

Ahora solo necesitamos añadir el atributo selected dentro del <option>, así que lo añadiremos mediante una breve sentencia if para comparar el $category->term_id actual y el guardado en la base de datos $stored_category_id:

$stored_category_id = 10; // Este es el valor de la base de datos
$selected = ( $stored_category_id == $category->term_id  ) ? 'selected' : '';

¡Y eso es todo! Tu fragmento completo (quizás con una opción por defecto al principio) debería verse ahora así:

echo '<select name="categories">';
  // Añadir opción personalizada por defecto
  echo '<option>' . __('Sin Categoría', 'text-domain') . '</option>';

  // Obtener categorías como array
  $categories = get_categories( $args );
  foreach ( $categories as $category ) :

    // Comprobar si el ID del término actual es igual al guardado en la base de datos
    $selected = ( $stored_category_id ==  $category->term_id  ) ? 'selected' : '';

    echo '<option value="' . $category->term_id . '" ' . $selected . '>' . $category->name . '</option>';

  endforeach;

echo '</select>';

¡Buena suerte! :)

22 dic 2014 22:55:10
Comentarios

Gracias Sven, mi principal problema era que no estaba seguro de cómo escribir el select en php mientras obtenía los valores de la base de datos. Lo que realmente me sorprende es la falta de información en el codex.

Jamie Jamie
23 dic 2014 02:13:32