Здравствуйте, сегодня будем удалять с главной страницы админки 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'] ); } }
На этом все! Удачи!