Хук, вызываемый перед сохранением текстового виджета

22 янв. 2017 г., 04:44:17
Просмотры: 1.41K
Голосов: 0

Мне нужно узнать, какой хук/действие вызывается непосредственно перед сохранением содержимого и заголовка текстового виджета в базе данных. Я много искал в Google, но не смог найти название хука.

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

Обратите внимание: Мой вопрос не является дубликатом этого вопроса, потому что там речь идёт о фильтре, а я ищу хук или действие. Это может быть одним из решений, но не лучшим в моём случае, так как будет потреблять много ресурсов.
Пример: У меня есть 10 активных текстовых виджетов в сайдбаре, и при каждой загрузке страницы для каждого виджета будет вызываться widget_text. Поэтому я ищу более эффективное решение.

Любая помощь будет очень appreciated.
Спасибо.

1
Комментарии

гррр, ты жалуешься на ответ, который ещё даже не получил :((. В общем, если тебе нужно другое поведение, тебе следует написать собственный "текстовый виджет", так как при сохранении виджета срабатывают различные хуки, но их вряд ли получится легко использовать.

Mark Kaplun Mark Kaplun
22 янв. 2017 г. 04:54:26
Все ответы на вопрос 1
0

Не уверен, что именно вам нужно, но есть другие возможные варианты, например, этот хук:

/**
 * Фильтрует настройки виджета перед сохранением.
 *
 * Возврат false эффективно прервет возможность виджета
 * обновлять настройки.
 *
 * @since 2.8.0
 *
 * @param array     $instance     Текущие настройки экземпляра виджета.
 * @param array     $new_instance Массив новых настроек виджета.
 * @param array     $old_instance Массив старых настроек виджета.
 * @param WP_Widget $this         Текущий экземпляр виджета.
 */
 $instance = apply_filters( 
    'widget_update_callback', 
    $instance, 
    $new_instance, 
    $old_instance, 
    $this 
);

Вот пример, как мы можем настроить виджеты Text и изменить поле ввода text при их обновлении:

add_filter( 'widget_update_callback', function( $instance, $new, $old, $obj )
{
    if( 'text' === $obj->id_base && ! empty( $instance['text'] ) )
    {
        // Внимание: это переопределяет текстовый ввод экземпляра виджета:
        // $instance['text'] = 'переопределенный текст';
    }

    return $instance;
}, 10, 4 );
22 янв. 2017 г. 10:12:31