get_option() — функция для получения значений настроек из базы данных

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Одна из самых часто используемых функций в WordPress (сужу по себе и по тем темам, с которыми мне приходилось работать). Странно, что я описываю её у себя на блоге только сейчас.

get_option( $option, $default = false )

Если опция с указанным названием не существует, и параметр $dafault не указан, функция вернёт false.

Если в базе данных опция хранится как сериализованная строка, то при возвращении её она будет раскодирована функцией maybe_unserialize().

Скалярные нестроковые значения будут преобразованы в строки, например:

Параметры

$option
(строка) Название опции, значение которой хотим получить. Мы можем либо взять название одной из стандартных опций WordPress, перечисленных ниже , либо узнать её сами, о том как, я тоже рассказал.
$default
(число|строка|массив|объект) Если вы хотите получить какую-то несуществующую опцию на сайте, то функция get_option() либо возвращает false, либо то, что указано в этом втором параметре.

Стандартные опции WordPress

Под словом «стандартные» я подразумеваю те опции, которые уже существуют на чистом движке WordPress, большинство из них доступны через меню Настройки.

Я перечислил их ниже, предварительно разделив на категории. Для того, чтобы получить любую из них при помощи функции get_option(), нужно всего лишь передать название нужной опции в функцию, например для получения админского email мы можем воспользоваться строчкой кода $email = get_option( 'admin_email' );

Настройки – Общие

Настройки – Написание

Настройки – Чтение

Настройки – Обсуждение

Настройки – Медиафайлы

Плагины и темы

Примеры

1. Узнать название и вывести значение любой опции

Выше я уже перечислил несколько все опции WordPress, поэтому, вам необязательно проделывать все эти шаги, если только это не какая-то кастомная опция, добавленная либо в коде, либо через произвольную страницу настройки.

В этом примере мы узнаем название любой опции и затем выведем её.

Прежде всего, вы можете найти её в таблице wp_options (префикс wp_ кстати может отличаться) в базе данных. Для этого вам понадобится открыть phpMyAdmin, выбрать нужную нам базу даных и перейти в таблицу опций wp_options.

В целом она довольно очевидная и особых вопросов по ней быть не должно, уже на скриншоте вы можете заметить некоторые из стандартных опций WordPress, описанных выше.

Выведем сразу же описание блога:

echo get_option( 'blogdescription' ); // Just another WordPress site

Если у вас нет доступа к базе данных, или же вы не умеете заходить в phpMyAdmin, то есть и другой путь.

Другой путь заключается в использовании правой кнопки мыши и контекстного меню браузера 🙂

Заходим на страницу настроек, где находится интересующая нас опция, например у меня это банально Настройки > Общие, кликаем на интересующем вас поле правой кнопкой и выбираем Проинспектировать элемент (это в браузере Google Chrome, в других может и отличаться).

Выводим опцию!

echo get_option( 'default_role' ); // subscriber

2. Отправка письма администратору сайта

Иногда приходится отправлять письма в коде функцией wp_mail(), да даже если мы говорим об обычной кастомной форме обратной связи.

В таком случае код может выглядеть так:

if( wp_mail( get_option( 'admin_email' ), 'Какая-то тема', 'Какое-то сообщение' ) ) {
	// успешно отправлено на email администратора из Настройки > Общее
}

3. Обработка несуществующих опций

Пара слов про параметр $default.

// получаем какую-либо опцию, которой не существует в базе данных
$value = get_option( 'true_not_existed_value' );
var_dump( $value ); /* выводится false */
 
// снова получаем какую-либо опцию, которой не существует в базе данных, но с параметром $default
$value = get_option( 'true_not_existed_value', 'привет' );
var_dump( $value ); /* выводится привет */

Хуки

Ниже описаны хуки, которые присутствуют внутри функции get_option(). Если вы понятия не имеете, что такое хуки и как их использовать, то этот видеоурок специально для вас.

pre_option_{$option}

Этот хук позволяет модифицировать значение любой опции ещё до того, как её значение будет получено из базы данных.

Обратие внимание, что название опции является частью названия хука!

$pre = apply_filters( "pre_option_{$option}", false, $option, $default );
$option
(строка) Название опции.
$default
(целое число|строка|массив|логическое|объект) Значение опции по умолчанию, переданное в параметре $default.

В качестве примера давайте подменим какую-либо из опций. Как вариант, мы можем хукнуть опцию активных плагинов active_plugins.

add_filter( 'pre_option_active_plugins', 'true_deactivate_all_plugins' )
 
function true_deactivate_all_plugins( $plugins ){
	return array(); // возвращаем пустой массив, т.е. ни один из плагинов не будет активным
});

Кстати, мы не можем возвращать этим фильтром false, потому что тогда он будет проигнорирован. Но обратите внимание, что тут у нас нет доступа к текущему значению опции, потому что фильтр срабатывает ещё до её получения. Поэтому у нас не получится отключить какой-то определённый плагин. Иначе рекомендую воспользоваться хуком option_{$option}.

option_{$option}

Позволяет отфильтровать значение определённой опции перед самым её возвращением функцией.

return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );
$option
(строка) Название опции.
$value
(целое число|строка|массив|логическое|объект) Текущее значение опции, полученное из кэша или базы данных.

В качестве примера попробуем тот же самый с отключением плагинов, про который я рассказывал в описании хука pre_option_{$option}.

Ну что же, пришло время отключить определённый плагин. Для того, чтобы это сделать, возможно, что вам будет полезно узнать идентификатор плагина, который хотим отключить. Легче всего это сделать, распечатав где-нибудь весь массив с активными плагинами:

print_r( get_option( 'active_plugins' ) );

Теперь отключаем! К примеру Cyr-To-Lat.

add_filter( 'option_active_plugins', 'true_deactivate_plugin' )
 
function true_deactivate_plugin( $plugins ){
	// тут некоторая хитрость при удалении плагина из массива, потому что они в ассоциативном массиве с цифровыми индексами
	while ( false !== ($key = array_search( 'cyr2lat/cyr-to-lat.php', $plugins ) ) ) {
		unset( $plugins[ $key ] );
	}
	return $plugins;
} );

default_option_{$option}

return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
$option
(строка) Название опции.
$passed_default
(целое число|строка|массив|логическое|объект) Значение опции по умолчанию, переданное в параметре $default.
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии