wp_add_dashboard_widget()
Додає віджет (реєструє метабокс) у консоль (основна сторінка адмін-панелі сайту, мультисайту).
Функція має викликатися під час подій:
- wp_dashboard_setup – додати віджет в консоль сайту (блогу).
- wp_network_dashboard_setup (multisite) – додати віджет у консоль мережі сайтів.
- is_user_admin() .
Тобто. у WordPress для запуску віджетів створених (зареєстрованих) цією функцією використовуються події:
do_action( 'wp_dashboard_setup'); // консоль do_action( 'wp_network_dashboard_setup'); // консоль мережі сайтів do_action( 'wp_user_dashboard_widgets'); // консоль користувача
Дивіться також: видалення віджетів з консолі .
add_meta_box()
Хуків немає.
Повертає
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.
Код стане в нагоді, коли потрібно просто зберегти текст, введений у поле текстуобласті. Прямо в дашборді тут, на місці. Наприклад, написав собі на згадку, що потрібно зробити, виправити і т.д., натиснув кнопку зберегти, і воно висить собі. Зробив, стер, написав інше, зберіг – висить інше.
Для WP до 5.6
Для WP з 5.6
Отримаємо такий віджет:
нотатки
- Global. callable[]. $wp_dashboard_control_callbacks
список змін
З версії 2.7.0 | Введено. |
З версії 5.6.0 | $context and $ priority parameters були added. |