Одна из самых часто используемых функций в 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
.