wp_add_dashboard_widget()
Добавляет виджет (регистрирует метабокс) в консоль (основная страница админ-панели сайта, мультисайта).
Функция должна вызываться во время событий:
- wp_dashboard_setup — добавить виджет в консоль сайта (блога).
- wp_network_dashboard_setup (multisite) — добавить виджет в консоль сети сайтов.
- wp_user_dashboard_widgets (multisite) — добавить виджеты в консоль юзера. см is_user_admin().
Т.е. в WordPress для запуска виджетов созданных (зарегистрированных) этой функцией используются события:
do_action( 'wp_dashboard_setup' ); // консоль do_action( 'wp_network_dashboard_setup' ); // консоль сети сайтов do_action( 'wp_user_dashboard_widgets' ); // консоль юзера
Смотрите также: удаление виджетов из консоли.
Хуков нет.
Возвращает
null
. Ничего не возвращает, а добавляет метабокс.
Использование
wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback, $callback_args );
- $widget_id(строка) (обязательный)
- Идентификатор виджета. Будет использован в CSS классе блока виджета. Станет ключом виджета в массиве виджетов.
- $widget_name(строка) (обязательный)
- Название виджета. Будет видно в верхней части виджета. Пр.: "Последние комментарии".
- $callback(callable) (обязательный)
- Название PHP функции, которая будет выводить на экран содержание виджета.
- $control_callback(callable)
- Название функции, которая будет обрабатывать запрос редактирования виджета. В этой функции нужно одновременно сохранять настройки виджета и выводить HTML форму настроек.
По умолчанию: null - $callback_args(массив)
- Аргументы, которые будут переданы в функцию обратного вызова. callback функция получит объект $post и другие данные переданные через этот параметр.
По умолчанию: null - $context(массив) (WP 5.6)
- Контекст экрана, где должен отображаться виджет:
normal
,side
,column3
,column4
.
По умолчанию: 'normal' - $priority(массив) (WP 5.6)
- Приоритет отображение в контексте:
high
,core
,default
,low
.
По умолчанию: 'core'
Примеры
#1 Добавление виджета в консоль
Это демонстративный пример добавления виджета на страницу админ-панели:
// Регистрация виджета консоли add_action( 'wp_dashboard_setup', 'add_dashboard_widgets' ); // Используется в хуке function add_dashboard_widgets() { wp_add_dashboard_widget( 'my_dashboard_widget', 'Метабокс в консоли', 'my_dashboard_widget_function' ); } // Выводит контент function my_dashboard_widget_function( $post, $callback_args ) { echo 'Всем привет! Это мой первый виджет!'; }
#2 Добавление виджета в консоль сети мультисайт
Чтобы добавить виджет в консоль управления сетью, нужно вызывать функцию на хуке wp_network_dashboard_setup
.
// Добавление виджета в консоль сети мультисайт add_action( 'wp_network_dashboard_setup', function() { wp_add_dashboard_widget( 'my_dashboard_widget', 'Метабокс в консоли multisite', 'my_dashboard_widget_function' ); } ); function my_dashboard_widget_function( $post, $callback_args ) { echo 'Привет от виджета консоли сети сайтов!'; }
#3 Изменение расположения виджета
Эта функция не позволяет указать расположение виджета и по умолчанию будет располагать виджет в конец первого столбика (слева). Так как функция работает на базе функции add_meta_box(), мы можем использовать её напрямую, в ней можно указать место расположения виджета (в какую колонку его нужно добавить). Технически все виджеты добавляются в глобальный массив $wp_meta_boxes, меняя расположение виджетов в нем можно изменить их реальное расположение. Однако надо помнить, то расположение виджетов запоминается в опции юзера при их перетаскивании, а это в свою очередь может влиять на итоговое расположение элементов массива $wp_meta_boxes.
Разместим виджет в правом столбце, указав четвертый параметр "$post_type " для функции add_meta_box().
add_meta_box( 'id', 'Dashboard Widget Title', 'dash_widget', 'dashboard', 'side', 'high' );
Для сети сайтов (multisite) в 4-м параметре нужно указать dashboard-network
:
add_meta_box( 'id', 'Network Dashboard Widget Title', 'widget_output_func', 'dashboard-network', 'normal', 'high' );
#4 Использование параметра $control_callback
С помощью $control_callback мы можем настраивать виджет. Код ниже регистрирует такой виджет:
Который имеет такой раздел настроек:
add_action( 'wp_dashboard_setup', 'prefix_add_dashboard_widget' ); function prefix_add_dashboard_widget() { wp_add_dashboard_widget( 'my_dashboard_widget', 'Основная страница в консоли', 'prefix_dashboard_widget', 'prefix_dashboard_widget_handle' ); } function prefix_dashboard_widget() { // получим сохраненые данные if( !$widget_options = get_option( 'my_dashboard_widget_options' ) ) $widget_options = array( ); // вывод виджета $output = sprintf( '<h2 style="text-align:right">%s</h2>', __( 'Настройте виджет ☝' ) ); // проверим есть ли сохраненные данные $saved_feature_post = isset( $widget_options['feature_post'] ) ? $widget_options['feature_post'] : false; // произвольные контент сохраненный функцией, изменяет вывод if( $saved_feature_post ) { $post = get_post( $saved_feature_post ); if( $post ) { $content = do_shortcode( html_entity_decode( $post->post_content ) ); $output = "<h2>{$post->post_title}</h2><p>{$content}</p>"; } } echo "<div class='feature_post_class_wrap'> <label style='background:#ccc;'>$output</label> </div> "; } function prefix_dashboard_widget_handle(){ // получим сохраненные данные if( !$widget_options = get_option( 'my_dashboard_widget_options' ) ) $widget_options = array( ); // обновление if( 'POST' == $_SERVER['REQUEST_METHOD'] && isset( $_POST['my_dashboard_widget_options'] ) ) { // проверка $widget_options['feature_post'] = absint( $_POST['my_dashboard_widget_options']['feature_post'] ); // сохранение данных update_option( 'my_dashboard_widget_options', $widget_options ); } // значения по умолчанию if( !isset( $widget_options['feature_post'] ) ) $widget_options['feature_post'] = ''; echo "<p><strong>Доступные страницы</strong></p> <div class='feature_post_class_wrap'> <label>Заголовок</label>"; wp_dropdown_pages( array( 'post_type' => 'page', 'selected' => $widget_options['feature_post'], 'name' => 'my_dashboard_widget_options[feature_post]', 'id' => 'feature_post', 'show_option_none' => '- выберете -' ) ); echo "</div>"; }
#5 Пример создания виджета для создания заметок
Пример добавляет виджет, который сохраняет заметки в опцию WP. Работает на AJAX.
Код пригодится, когда нужно просто сохранить текст, введённый в поле textarea. Прямо в дашборде, тут, на месте. Например, написал себе на память что нужно сделать, исправить и т.д., нажал кнопку сохранить, и оно висит себе. Сделал, стёр, написал другое, сохранил - висит другое.
Для WP до 5.6
Для WP с 5.6
Получим такой виджет:
Заметки
- Global. callable[]. $wp_dashboard_control_callbacks
Список изменений
С версии 2.7.0 | Введена. |
С версии 5.6.0 | The $context and $priority parameters were added. |