Фильтр widget_text в WordPress: как использовать и кастомизировать текстовые виджеты

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

Что такое фильтр widget_text?

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

Синтаксис фильтра

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

add_filter( 'widget_text', 'custom_widget_text_filter' );

/**
 * Функция для изменения текста в текстовом виджете.
 *
 * @param string $text Содержимое виджета.
 * @return string Измененное содержимое.
 */
function custom_widget_text_filter( $text ) {
    // Добавляем дополнительный текст в конец содержимого виджета
    $text .= '<p>Это дополнительный текст, добавленный фильтром.</p>';
    
    return $text;
}

Как это работает

  1. add_filter( 'widget_text', 'custom_widget_text_filter' );: Этот код регистрирует наш фильтр widget_text и связывает его с функцией custom_widget_text_filter.
  2. Функция custom_widget_text_filter: При каждом выводе текстового виджета функция получает его содержимое в виде аргумента $text. Мы изменяем это содержимое, добавляя к нему дополнительный текст, и возвращаем его обратно для отображения на сайте.

Пример расширенного использования

Иногда может возникнуть необходимость более сложной обработки текста, например, добавления HTML или динамического контента в зависимости от условий.

add_filter( 'widget_text', 'advanced_widget_text_filter' );

function advanced_widget_text_filter( $text ) {
    // Добавляем динамическую ссылку в текстовый виджет
    if ( is_single() ) {
        $text .= '<p><a href="' . esc_url( get_home_url() ) . '">Вернуться на главную</a></p>';
    }
    
    return $text;
}

В этом примере добавляется динамическая ссылка, но только на страницах одиночных записей (is_single()).

Пример использования фильтра с объектом виджета

Если вы хотите изменять текстовый виджет в зависимости от его настроек, можно использовать дополнительный аргумент $instance:

add_filter( 'widget_text', 'modify_widget_text_based_on_instance', 10, 3 );

function modify_widget_text_based_on_instance( $text, $instance, $widget ) {
    // Проверяем, является ли это конкретным виджетом и добавляем модификацию
    if ( ! empty( $instance['filter'] ) ) {
        $text = '<strong>Фильтр применен к этому виджету:</strong> ' . $text;
    }

    return $text;
}

Здесь мы проверяем настройки виджета и модифицируем содержимое, если включена опция фильтрации ($instance['filter']).

Когда использовать фильтр widget_text

  1. Добавление рекламы или CTA (призыв к действию): Вы можете динамически добавлять баннеры или призывы к действию в текстовые виджеты.
  2. Модификация контента на основе условий: В зависимости от типа страницы, категории или пользователя, вы можете изменять отображаемый текст в виджете.
  3. Автоматическое форматирование текста: Вы можете добавлять HTML-теги, стили или оборачивать текст в контейнеры.

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