Cómo obtener el valor seleccionado de wp_dropdown_categories
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 );

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