Как получить значение из wp_dropdown_categories в WordPress

21 дек. 2014 г., 22:09:18
Просмотры: 13.9K
Голосов: 4

Я создаю виджет и использовал в нем функцию wp_dropdown_categories(). Что я не могу понять - как получить выбранное значение из выпадающего списка.

В какой переменной хранится выбранное значение?

$args = array('show_option_none' => 'Без категории', 'hide_empty' => 0);
wp_dropdown_categories( $args );
6
Комментарии

Что вы хотите сделать со значением? В HTML выбранное значение доступно как selected внутри тега option

Sven Sven
21 дек. 2014 г. 22:57:12

Я хочу создать цикл категорий на основе выбранной категории

Jamie Jamie
21 дек. 2014 г. 23:50:09

Возможно, вам лучше использовать get_categories() для перебора массива категорий :)

Sven Sven
21 дек. 2014 г. 23:58:15

Твой 100-й вопрос :)

kaiser kaiser
22 дек. 2014 г. 00:55:31

Можешь опубликовать фрагмент кода, чтобы показать, что ты имеешь в виду, Свен? У меня не получается заставить это работать

Jamie Jamie
22 дек. 2014 г. 04:09:15

Питер, это никоим образом не дубликат того вопроса. У меня даже нет цикла в моем коде. Правильный ответ на этот вопрос даже близко не похож на то, что было опубликовано в том другом вопросе. Я нашел ответ на этот вопрос и опубликую его, когда весь код заработает. Я вообще не использую get_tags или get_categories на этом этапе. Все, что мне нужно было сделать, чтобы получить значения - это добавить несколько опций в функцию wp_dropdown_categories. Затем я мог сделать print_r($instance) и увидеть, что мои значения там есть. Я также мог найти их в базе данных. Так что теперь я знаю, как получить значения.

Jamie Jamie
22 дек. 2014 г. 15:59:00
Показать остальные 1 комментариев
Все ответы на вопрос 1
1

Мы можем получить категории с помощью функции 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>';

Удачи! :)

22 дек. 2014 г. 22:55:10
Комментарии

Спасибо, Свен. Моя основная проблема была в том, что я не был уверен, как правильно написать select в PHP, получая значения из базы данных. Что действительно удивляет, так это отсутствие информации в кодексе.

Jamie Jamie
23 дек. 2014 г. 02:13:32