Функция 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()
упрощает настройку выпадающих списков, делая код проще и сокращая потенциальные ошибки при сравнении значений.