Фильтр option_(option_name) в WordPress: как изменять значение настроек через фильтры

Фильтр option_(option_name) в WordPress позволяет изменять значения настроек перед их выводом. Этот фильтр полезен, когда вы хотите динамически модифицировать значение определённой опции (настройки), сохранённой в базе данных WordPress, без изменения самой настройки в админке.

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

Использование фильтра option_(option_name)

Формат фильтра:

add_filter( 'option_option_name', 'custom_option_value' );

function custom_option_value( $value ) {
    // Изменяем значение настройки
    return 'Новое значение';
}

Где:

  • option_option_name — это имя фильтра, где option_name заменяется на имя настройки, значение которой вы хотите изменить.
  • $value — текущее значение настройки.

Пример: изменение опции blogname

Рассмотрим пример, когда нужно изменить название сайта (blogname), но только при выводе через функцию get_option():

add_filter( 'option_blogname', 'change_blogname' );

function change_blogname( $value ) {
    // Меняем название сайта на кастомное
    return 'Мой кастомный сайт';
}

В данном случае, когда функция get_option( 'blogname' ) будет вызвана, вместо сохранённого значения будет возвращено 'Мой кастомный сайт'.

Пример с динамическим значением

Вы можете использовать этот фильтр для более сложных изменений, например, подставлять динамическое значение в зависимости от условий:

add_filter( 'option_blogdescription', 'dynamic_blogdescription' );

function dynamic_blogdescription( $value ) {
    // Если пользователь авторизован, показываем одно описание
    if ( is_user_logged_in() ) {
        return 'Добро пожаловать, ' . wp_get_current_user()->display_name . '!';
    }
    
    // Для остальных пользователей возвращаем стандартное описание
    return $value;
}

Теперь, когда аутентифицированные пользователи заходят на сайт, описание сайта изменяется в зависимости от имени текущего пользователя.

Пример: модификация кастомных опций

Фильтр option_(option_name) работает не только с предустановленными опциями WordPress, но и с кастомными опциями, созданными разработчиками. Предположим, у вас есть настройка с именем custom_welcome_message, которая хранится в базе данных:

add_filter( 'option_custom_welcome_message', 'customize_welcome_message' );

function customize_welcome_message( $value ) {
    // Меняем приветственное сообщение только для администраторов
    if ( current_user_can( 'manage_options' ) ) {
        return 'Добро пожаловать, администратор!';
    }
    
    // Для остальных оставляем стандартное значение
    return $value;
}

Заключение

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

Почитаем еще?: