Как получить значение из wp_dropdown_categories в WordPress
Я создаю виджет и использовал в нем функцию wp_dropdown_categories(). Что я не могу понять - как получить выбранное значение из выпадающего списка.
В какой переменной хранится выбранное значение?
$args = array('show_option_none' => 'Без категории', 'hide_empty' => 0);
wp_dropdown_categories( $args );

Мы можем получить категории с помощью функции get_categories() (которая получит те же категории, что и функция wp_dropdown_categories()), но в виде массива и без разметки.
Поскольку значение возвращается как массив, мы можем пройтись по категориям в цикле и сгенерировать HTML самостоятельно.
Обычно мы стремимся к такой структуре:
<select name="categories">
<option value="1">Категория 1</option>
<option value="2">Категория 2</option>
<option value="3">Категория 3</option>
</select>
Итак, мы собираемся сгенерировать структуру выше с помощью PHP, перебирая массив $categories
:
echo '<select name="categories">';
// Получаем категории в виде массива
$categories = get_categories( $args );
foreach ( $categories as $category ) :
echo '<option value="' . $category->term_id . '">' . $category->name . '</option>';
endforeach;
echo '</select>';
Не стесняйтесь изменять функцию через параметры $args
(см. Кодекс для справки).
Теперь нам просто нужно добавить атрибут selected
внутри <option>
, поэтому мы добавим его с помощью короткого условия if, чтобы сравнить текущий $category->term_id
и сохранённый в базе данных $stored_category_id
:
$stored_category_id = 10; // Это значение из базы данных
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
И всё! Ваш полный сниппет (возможно, с опцией по умолчанию в начале) теперь должен выглядеть примерно так:
echo '<select name="categories">';
// Добавляем пользовательскую опцию по умолчанию
echo '<option>' . __('Без категории', 'text-domain') . '</option>';
// Получаем категории в виде массива
$categories = get_categories( $args );
foreach ( $categories as $category ) :
// Проверяем, совпадает ли текущий ID термина с ID, сохранённым в базе данных
$selected = ( $stored_category_id == $category->term_id ) ? 'selected' : '';
echo '<option value="' . $category->term_id . '" ' . $selected . '>' . $category->name . '</option>';
endforeach;
echo '</select>';
Удачи! :)
