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

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

get_option( $option, $default = false )

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

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

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

  • false значение опции будет возвращено как string(0) ""
  • true будет возвращено как string(1) "1",
  • 0 будет возвращено как string(1) "0",
  • 1 будет возвращено как string(1) "1";

Параметры

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

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

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

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

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

Название опцииОписание
admin_email (строка)Административный адрес email.
blogdescription (строка)Краткое описание сайта. По умолчанию: __('Just another WordPress blog') Если эта строчка вызывает у вас вопросы, читайте мой урок про локализацию сайта.
blogname (строка)Название сайта.
users_can_register (целое число)Открыта ли регистрация на сайте. Может принимать значения 1 – открыта, 0 – закрыта (по умолчанию).
default_role (строка)Роль, присваиваемая новым пользователям при регистрации на сайте. По умолчанию – subscriber (подписчик).
WPLANG (строка)Язык сайта. В формате локали ru_RU, где ru – задаёт русский язык, а RU – страну. Например en_GB, где en – английский язык, а GB – страна в формате ISO 3166-1 Alpha-2
gmt_offset (целое число)На сколько часов время сайта отличается от времени по Гринвичу (GMT), например для Москвы этот параметр равен 3 (GMT+3).
timezone_string (строка)Значение часового пояса сайта, например Europe/Moscow
date_format (строка)Формат даты, который по умолчанию будет использоваться на сайте такими функциями как the_date(), get_the_date(), the_modified_date() и т.д. По умолчанию F j, Y. Однако учтите, что дата будет переведена. Например F j, Y будет соответствовать 3 января, 2022.
time_format (строка)Формат времени, который по умолчанию будет использоваться на сайте такими функциями, как the_time(), get_the_time(), the_modified_time() и т.д. По умолчанию g:i a, после перевода это будет например 12:44 пп (пп – после полудня).
start_of_week (целое число)Первый день недели. Может принимать значения:
0 – Воскресенье
1 – Понедельник
2 – Вторник
3 – Среда
4 – Четверг
5 – Пятница
6 – Суббота
siteurl (строка)Адрес URL, куда установлен WordPress, можно получить функцией site_url().
home (строка)Адрес URL непосредственно сайта, можно получить функцией home_url().

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

Название опцииОписание
use_smilies (целое число)Преобразовывать смайлики наподобие :-) и :-P в картинки. 0 – нет, 1 – да (по умолчанию).
use_balanceTags (целое число)WordPress должен исправлять некорректный XHTML-код автоматически. 0 – нет (по умолчанию), 1 – да.
default_category (целое число)Рубрика по умолчанию, которая будет присваиваться постам, если в них не добавлена ни одна рубрика. Также эту рубрику нельзя удалить.
default_post_format (строка)Формат записей по умолчанию.
mailserver_url (строка)Почтовый сервер для публикации через e-mail.
mailserver_port (целое число)Порт
mailserver_login (строка)Логин
mailserver_pass (пароль)Пароль
default_email_category (целое число)Рубрика по умолчанию для публикации по почте.
ping_sitesСервисы обновления.

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

Название опцииОписание
show_on_front (строка)Что выбрано в качестве отображения на главной странице сайта, может принимать всего два значения: posts (ваши последние записи), page (статическая страница).
page_on_front (целое число)ID страницы для отображения на главной странице.
page_for_posts (целое число)ID страницы, которая будет являться страницей блога.
posts_per_page (целое число)Сколько постов отображать на одной странице блога. Также является значением по умолчанию для вывода любых постов в циклах.
posts_per_rss (целое число)Сколько постов отображать в RSS.
rss_use_excerpt (строка)В RSS ленте отображать отрывок или полный текст.
blog_public (целое число)Попросить поисковые системы не индексировать сайт, 1 – попросить, 0 – не просить (по умолчанию). Подробнее об этой опции.

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

Название опцииОписание
default_pingback_flag (целое число)Пытаться оповестить блоги, упоминаемые в статье. 1 – да (по умолчанию), 0 – нет.
default_ping_status (строка)Разрешить оповещения с других блогов (уведомления и обратные ссылки) для новых записей. open – да (по умолчанию), closed – нет.
default_comment_status (строка)Разрешить оставлять комментарии к новым записям. open – да (по умолчанию), closed – нет.
require_name_email (целое число)Автор комментария должен указать имя и e-mail. 1 – да (по умолчанию), 0 – нет.
comment_registration (целое число)Пользователи должны быть зарегистрированы и авторизованы для комментирования. 1 – да, 0 – нет (по умолчанию).
close_comments_for_old_posts (целое число)Автоматически закрывать обсуждение статей старше количества дней, указанных в следующей опции. 1 – да, 0 – нет (по умолчанию).
close_comments_days_old (целое число)Количество дней, по прошествии которых нужно закрывать комментарии к посту. Работает в паре с предыдущей опцией.
show_comments_cookies_opt_in (целое число)Показывать галочку разрешения установки куки для авторов комментариев. 1 – да (по умолчанию), 0 – нет.
thread_comments (целое число)Разрешить древовидные комментарии. 1 – да (по умолчанию), 0 – нет.
thread_comments_depth (целое число)Количество уровней древовидных комментариев (от 2 до 10).
page_comments (целое число)Включить пагинацию для комментариев. 1 – да, 0 – нет (по умолчанию).
comments_per_page (целое число)Количество комментариев, отображаемых на одной странице при включенной пагинации.
default_comments_page (строка)Нужно ли сначала отображать последнюю страницу (значение newest, по умолчанию) при включенной пагинации или первую (oldest).
comment_order (строка)Сами же комментарии при включенной пагинации должны выводиться свежие наверху страницы (desc), или же более старые наверху страницы (asc, по умолчанию).
comments_notify (целое число)Нужно ли уведомлять администратора при появлении нового комментария. 1 – да (по умолчанию), 0 – нет.
moderation_notify (целое число)Нужно ли уведомлять администратора при появлении комментария, ожидающего модерации. 1 – да (по умолчанию), 0 – нет.
comment_moderation (целое число)Должен ли каждый комментарий быть одобрен вручную? 1 – да, 0 – нет (по умолчанию).
comment_previously_approved (целое число)Должны ли комментарии пользователя одобряться автоматически, если у него есть хотя бы один вручную одобренный комментарий. 1 – да (по умолчанию), 0 – нет.
comment_max_links (целое число)Количество ссылок в тексте комментария, при наличии которых он по-любому отправится на модерацию. По умолчанию 2.
moderation_keys (строка)Если комментарий содержит какие-либо из этих слов в своём тексте, имени автора, URL, адресе e-mail или IP, то поместить его в очередь на модерацию. Каждое слово или IP с новой строки.
disallowed_keys (строка)сли комментарий содержит какие-либо из этих слов в своём тексте, имени автора, URL, адресе e-mail или IP, то он будет удалён в корзину. Каждое слово или IP задается с новой строки.
show_avatars (целое число)Нужно ли отображать аватары пользователей. 1 – да (по умолчанию), 0 – нет.
avatar_rating (строка)Максимальный рейтинг аватаров, может принимать значения: G, PG, R, X.
avatar_default (строка)Что отображать, если у пользователя нет аватара,
mystery : (default) Человек-загадка
blank : Пустой
gravatar_default : Логотип Gravatar
identicon : Identicon (Автоматически)
wavatar : Wavatar (Автоматически)
monsterid : MonsterID (Автоматически)
retro : Ретро (Автоматически)

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

Название опцииОписание
thumbnail_size_w (целое число)Ширина миниатюры, по умолчанию 150.
thumbnail_size_h (целое число)Высота миниатюры, по умолчанию 150.
thumbnail_size_crop (целое число)Обрезать миниатюру точно по размерам. 1 – да (по умолчанию), 0 – нет.
medium_size_w (целое число)Ширина среднего размера, по умолчанию 300.
medium_size_h (целое число)Высота среднего размера, по умолчанию 300.
large_size_w (целое число)Ширина крупного размера, по умолчанию 1024.
large_size_h (целое число)Высота крупного размера, по умолчанию 1024.
upload_path (строка)Содержит название директории или путь относительно директории установки WordPress, где следует хранить медиафайлы. По умолчанию этот параметр пустой и медиафайлы хранятся в wp-content/uploads.
Название опцииОписание
permalink_structure (строка)Структура постоянных ссылок. Например я использую /%category%/%postname%.html  у себя на сайте.
category_base (строка)Префикс для рубрик (т.е слово, которое будет присутствовать в урлах рубрик, после домена сайте и перед ярлыком самой рубрики), по умолчанию category, о том, как его удалить, читайте тут.
tag_base (строка)Префикс для меток, по умолчанию tag.

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

Название опцииОписание
templateЯрлык текущей активной темы, или иначе говоря, название её директории. Если используется дочерняя тема, то в этом параметре будет храниться ярлык родительской темы. Например, если путь к вашей теме wp-content/themes/truemisha/, то значение опции будет truemisha.
stylesheetЯрлык текущей активной темы.
active_pluginsСодержит массив активных плагинов на сайте.

Примеры

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

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

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

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

Таблица настроек wp_options в базе данных WordPress

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

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

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

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

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

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

Как узнать $option_name любой настройки на сайте.

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

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.

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

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

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал