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. |
