Функция selected() в WordPress предназначена для удобного управления выпадающими списками <select>, возвращая атрибут selected="selected", если переданные значения совпадают. Это упрощает определение выбранного пункта в выпадающем списке, избавляя от необходимости использования условных выражений.
selected( mixed $selected, mixed $current = true, bool $display = true ): string
Параметры:
- $selected — Обязательное значение для сравнения с
$current. - $current — Необязательное значение, с которым производится сравнение (по умолчанию
true). - $display — Определяет, выводить ли атрибут напрямую (
true) или вернуть его в виде строки (false). По умолчаниюtrue.
Возвращаемое значение: Строка selected="selected", если значения $selected и $current идентичны, или пустая строка, если они отличаются.
Принцип работы функции
Функция selected() приводит оба значения к строковому типу, что позволяет избежать ошибок из-за различных типов данных. Например, 1 будет эквивалентен '1', а true — '1'.
Пример 1: Применение selected() в выпадающем списке
Пример показывает, как добавить selected к нужному <option>, основываясь на значении, сохраненном в базе данных:
<?php
// Получаем выбранный параметр из базы данных
$options = get_option('settings_group');
$selected_option = $options['language'];
?>
<select name="settings_group[language]">
<option value="en" <?php selected($selected_option, 'en'); ?>>English</option>
<option value="fr" <?php selected($selected_option, 'fr'); ?>>French</option>
<option value="de" <?php selected($selected_option, 'de'); ?>>German</option>
</select>
Пример 2: Сравнение использования if и selected()
Можно установить значение выбранного элемента с помощью условного оператора if или функции selected(). Функция selected() делает код более лаконичным и удобочитаемым.
С использованием if:
<select name="user_options[theme]">
<option value="light" <?php if ($user_theme == 'light') echo 'selected="selected"'; ?>>Light</option>
<option value="dark" <?php if ($user_theme == 'dark') echo 'selected="selected"'; ?>>Dark</option>
</select>
С использованием selected():
<select name="user_options[theme]">
<option value="light" <?php selected($user_theme, 'light'); ?>>Light</option>
<option value="dark" <?php selected($user_theme, 'dark'); ?>>Dark</option>
</select>
Пример 3: Генерация выпадающего списка с циклами
Если выпадающий список должен включать значения из базы данных или массива, то можно использовать selected() внутри цикла.
<?php
// Пример массива опций
$colors = ['red' => 'Red', 'green' => 'Green', 'blue' => 'Blue'];
$chosen_color = 'green';
?>
<select name="settings[primary_color]">
<?php foreach ($colors as $color_value => $color_label) : ?>
<option value="<?php echo esc_attr($color_value); ?>" <?php selected($chosen_color, $color_value); ?>>
<?php echo esc_html($color_label); ?>
</option>
<?php endforeach; ?>
</select>
Пример 4: Использование selected() с параметром $display = false
Если selected() используется для построения строки, например, при передаче значений в sprintf(), установите $display в false, чтобы функция вернула строку, а не выводила её.
// Опции выбора
$options = [1 => 'Option A', 2 => 'Option B', 3 => 'Option C'];
$selected_id = 2;
$html_options = '';
foreach ($options as $value => $label) {
$html_options .= sprintf(
'<option value="%s" %s>%s</option>',
esc_attr($value),
selected($selected_id, $value, false),
esc_html($label)
);
}
echo '<select name="settings[option_choice]">' . $html_options . '</select>';
Полезные замечания
- При использовании
selected(), проверка типа данных приводит значения к строкам. Поэтому совпадения между1и'1'илиtrueи'1'обрабатываются корректно. - Если в настройках параметр не сохранен, перед использованием функции рекомендуется устанавливать значение по умолчанию:
$settings = get_option('user_preferences');
if (!isset($settings['color_preference'])) {
$settings['color_preference'] = 'default_color';
}
Заключение
Функция selected() упрощает настройку выпадающих списков, делая код проще и сокращая потенциальные ошибки при сравнении значений.