Здравствуйте, сегодня будем удалять с главной страницы админки wordpress ненужные виджеты и добавим свой собственный виджет.
Скачать исходники для статьи можно ниже
Добавлять и удалять виджеты будем с помощью плагин, который мы создадим с вами вместе в данной статье.
Можно, конечно же, добавить код в файл functions.php темы вашего сайта, однако, если вы поменяете или обновите тему, то и все изменения исчезнут.
Скачать плагин:
Сразу же, в начале данной статьи, вы можете скачать создаваемый нами плагин:
Скачать плагин “Mnogoblog Dashboard Widgets”.
Результат:
До:
После:
Теперь давайте приступим к созданию плагина “Mnogoblog Dashboard Widgets”.
1. Создаем файл dashboard_widgets.php со следующим кодом:
<?php /* Plugin Name: Mnogoblog Dashboard Widgets Plugin URI: Description: Create custom dashboard widgets Version: 0.1 Author: Mnogoblog Author URI: https://mnogoblog.ru License: GPL2 */
Здесь все просто – задается имя плагина, автор, сайт и др.
Далее пишем следующий код:
class Mnogoblog_Dashboard_Widgets {
function __construct() {
add_action( 'wp_dashboard_setup', array( $this, 'remove_dashboard_widgets' ) );
add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widgets' ) );
}
function remove_dashboard_widgets() {
}
function add_dashboard_widgets() {
}
}
$mdw = new Mnogoblog_Dashboard_Widgets();
Здесь:
– функция “remove_dashboard_widgets” будет использоваться, чтобы удалить стандартные виджеты.
– функция “add_dashboard_widgets” будет использоваться, чтобы добавить свои виджеты.
2. Далее давайте создадим еще один файл с именем custom_widgets.php.
Для начала нужно прописать в файле dashboard_widgets.php ссылку на наш custom_widgets.php, для этого добавим в dashboard_widgets.php следующий код:
require_once( plugin_dir_path( __FILE__ ) . '/custom_widgets.php' );
Теперь же приступим к редактированию файла custom_widgets.php, в нем мы будем определять какие виджеты нужно удалить, а какие добавить.
Удалять стандартные виджеты мы будем, используя функцию remove_meta_box() – более подробно о ней читайте в кодексе wordpress по следующей ссылке “codex.wordpress.org/Function_Reference/remove_meta_box” (на анг.) или “wp-kama.ru/function/remove_meta_box” (на рус.), данная функция имеет три аргумента:
<?php remove_meta_box( $id, $page, $context ); ?>
$id – атрибут HTML тега, контейнера Блока.
$page – тип записи на странице, на которой будет удаляться метаблок.
$context – место, где Блок выводится.
Итак, давайте пропишем в файл custom_widgets.php следующий код, позволяющий удалить стандартные виджеты с главной страницы админки:
<?php
$remove_defaults_widgets = array(
'dashboard_incoming_links' => array(
'page' => 'dashboard',
'context' => 'normal'
),
'dashboard_right_now' => array(
'page' => 'dashboard',
'context' => 'normal'
),
'dashboard_recent_drafts' => array(
'page' => 'dashboard',
'context' => 'side'
),
'dashboard_quick_press' => array(
'page' => 'dashboard',
'context' => 'side'
),
'dashboard_plugins' => array(
'page' => 'dashboard',
'context' => 'normal'
),
'dashboard_primary' => array(
'page' => 'dashboard',
'context' => 'side'
),
'dashboard_secondary' => array(
'page' => 'dashboard',
'context' => 'side'
),
'dashboard_recent_comments' => array(
'page' => 'dashboard',
'context' => 'normal'
)
);
Для того, чтобы удалить все виджеты с главной страницы Админки можно просто воспользоваться следующим кодом, который можно прописать в файл fuctions.php:
function remove_dashboard_widgets(){
remove_meta_box('dashboard_right_now', 'dashboard', 'normal'); // Right Now
remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal'); // Recent Comments
remove_meta_box('dashboard_incoming_links', 'dashboard', 'normal'); // Incoming Links
remove_meta_box('dashboard_plugins', 'dashboard', 'normal'); // Plugins
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Quick Press
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side'); // Recent Drafts
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // WordPress blog
remove_meta_box('dashboard_secondary', 'dashboard', 'side'); // Other WordPress News
// use 'dashboard-network' as the second parameter to remove widgets from a network dashboard.
}
add_action('wp_dashboard_setup', 'remove_dashboard_widgets');
Для добавления пользовательских виджетов WordPress, мы будем использовать встроенную функцию wp_add_dashboard_widget() – о данной функции можно прочитать здесь – “codex.wordpress.org/Function_Reference/wp_add_dashboard_widget” (анг.) или здесь – “wp-kama.ru/function/wp_add_dashboard_widget” (на рус.).
Функция принимает несколько аргументов:
wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback, $callback_args );
$widget_id – идентификатор виджета. Будет использован в CSS классе блока виджета. Станет ключом виджета в массиве виджетов.
$widget_name – название виджета. Будет видно в верхней части виджета. Пр.: “Последние комментарии”.
$callback – название PHP функции, которая будет выводить на экран содержание виджета.
$control_callback – название функции, которая будет обрабатывать запрос редактирования виджета. В этой функции нужно сохранять настройки виджета и выводить форму настроек.
$callback_args – аргументы, которые будут переданы в функцию обратного вызова. callback функция получит объект $post и другие параметры переданные через эту переменную.
Давайте добавим свой виджет на главную страницу админки:
$custom_dashboard_widgets = array(
'my-dashboard-widget' => array(
'title' => 'Мой виджет',
'callback' => 'dashboardWidgetContent'
)
);
Чтобы данный виджет не был пустым – давайте выведем в нем наши последние 10 публикаций, а для этого добавим следующий код:
function dashboardWidgetContent()
{
$user = wp_get_current_user();
echo 'Здравствуйте <strong>' . $user->user_login . '</strong>, это ваш пользовательский виджет. Ниже вы можете увидеть последние 10 ваших опубликованных статьей:';
$r = new WP_Query( apply_filters( 'widget_posts_args', array(
'posts_per_page' => 10,
'post_status' => 'publish',
'author' => $user->ID ) ) );
if ($r->have_posts()) : ?>
<ul>
<?php while ( $r->have_posts() ) : $r->the_post(); ?>
<li>
<?php edit_post_link(get_the_title());?>
</li>
<?php endwhile; ?>
</ul>
<?php endif;
}
3. Далее немного отредактируем файл dashboard_widgets.php
Допишем функцию remove_dashboard_widgets() – удаляющие виджеты – следующим образом:
function remove_dashboard_widgets() {
global $remove_defaults_widgets;
foreach ( $remove_defaults_widgets as $widget_id => $options ) {
remove_meta_box( $widget_id, $options['page'], $options['context'] );
}
}
Допишем функцию add_dashboard_widgets() – добавляющие виджеты – следующим образом:
function add_dashboard_widgets() {
global $custom_dashboard_widgets;
foreach ( $custom_dashboard_widgets as $widget_id => $options ) {
wp_add_dashboard_widget(
$widget_id,
$options['title'],
$options['callback']
);
}
}
На этом все! Удачи!

