Що ми будемо створювати

Люди часто скаржаться, що WordPress працює повільно. Так це чи ні, насправді залежить від багатьох факторів. Але якщо ми зможемо відстежувати використання ресурсів сервера в панелі управління WordPress, це дасть нам деяке уявлення про те, як добре працює наша система:

У цій статті ми займемося розробкою плагіна для відображення інформації про стан сервера, в тому числі використання дискового простору, споживанні пам’яті, завантаження процесора і запущених процесах.

Ми також дізнаємося про кеші WordPress, щоб уникнути постійних запитів цього параметра. Ми також розглянемо хронологію процесів WordPress, щоб мати можливість автоматично згенерувати ці дані.

Консоль панелі адміністрування надає нам кілька блоків під назвою віджети.
До них відносяться:

  • Прямо зараз;
  • Свіжі публікації;
  • Швидка публікація;
  • Новини WordPress;
  • Ласкаво просимо.

Ви можете переставити віджети в довільному порядку на свій розсуд, можете вивести їх або приховати — простіше кажучи, консоль налаштовується.

Оскільки адміністратор сайту має можливість гнучкого налаштування віджетів, ми можемо використовувати їх, щоб показати інформацію про використання ресурсів сервера: використання дискового простору, використання оперативної пам’яті, завантаження процесора, а також відобразити відомості про операційну систему. Для стислості ми будемо називати ці ресурси «метриками«.

У цій серії статей ми розглянемо API віджетів консолі і Ролі права доступу, що допоможе нам розібратися, як зробити ці віджети доступними для різних користувачів.

Я також розповім про деяких основних командах Linux, з допомогою яких ми будемо підтягувати інформацію про сервер і вставляти її в наш віджет консолі.

Ми будемо використовувати Перехідні API для кешування даних. Ми задіємо Cronjobs, щоб автоматично підтягувати ці дані, а не виконувати кожен раз окремі запити.

Робота нашого плагіна заснована на Linux Dash

Наш плагін підтримує дев’ять видів метрик. В результаті у нас буде дев’ять віджетів консолі:

  • Інформація про сервер: операційна система, ядро Linux, час оновлення і т. д.;
  • Завантаження CPU: середнє завантаження процесора за 1, 5 і 15 хвилин;
  • Використання оперативної пам’яті фізичної ОЗУ і файлу підкачки;
  • Використання диска;
  • Встановлене програмне забезпечення;
  • Процеси;
  • Ethernet;
  • Продуктивність мережі;
  • Статистика IO.

Що вам потрібно

  • Середовище Linux. Можливе використання Mac OS X, але деякі команди для перевірки вищевказаних показників будуть не доступні, так що якщо після відправлення команди вам видається помилка, ви будете знати, що в Mac ця команда не підтримується;
  • Базове розуміння Shell;
  • Базове розуміння плагінів WordPress.

Каркас структури плагіна

Давайте створимо простий плагін і назвемо його Server Dashboard. Ми почнемо з деяких базових речей. Традиційне Привіт, Світ допоможе зробити додавання віджету в консоль трохи цікавіше.

Насправді це просто.

Створюємо папку під назвою Server Dashboard в папці wp-content/plugins, і в цій папці створюємо файл serverdashboard.php. Структура папки повинна виглядати наступним чином. Просто поки зосередьтеся на головному файлі і не звертайте уваги на бины, тести, віджети і так далі:

Основи налаштування консолі WordPress

Вставте цей код у файл serverdashboard.php:

run();
?>

Я використовував простір імен AXStatBoard, щоб уникнути співпадіння з іменами різних класів плагінів, назв функцій, та інших плагінів.

Я також використовував одиночний шаблон, щоб створити унікальний екземпляр об’єкта класу модуля. Я створив метод run для звернення реєстрації або фільтра WordPress.

Щоб додати віджет, ми повинні підключитися до дії wp_dashboard_setup. Це звернення надає нам доступ до пов’язаної з консоллю опції настроювання. Що дає нам можливість додавати або видаляти віджети консолі WordPress.

Всередині функції обігу, ми використовуємо wp_add_dashboard_widget, щоб зареєструвати віджет. Для цього потрібні такі аргументи у такій послідовності:

  • ID віджета використовується для ідентифікації жетона для вашого віджета. Цей жетон використовується при виведенні ідентифікатора CSS, класу і в якості ключів у масиві віджета;
  • Заголовок віджета відображається в полі заголовка блоку віджета. Зворотний виклик для виведення вмісту віджета. Вміст слід виводити безпосередньо, без повернення.

Як правило, ми маємо справу із зворотніми викликами, що представляють собою самостійну функцію, анонімну функцію, масив об’єкта і методу або масив класу і статичного методу.

Оновіть сторінку консолі. Плагін виводить наш віджет. Зверніть увагу на id елемента div віджета:

Основи налаштування консолі WordPress

Наш плагін виводить віджет з власним ідентифікатором і вмістом. Давайте додамо деякий вміст. Виведемо кругову діаграму з деякими довільними даними.

Для простоти я буду використовувати Google Chart API. Ми будемо неодноразово використовувати його в подальшому для метрик сервера, тому що він відмінно підходить для візуалізації даних такого роду.

Якщо вам не подобається Google Chart, ви можете вставити замість нього свою улюблену бібліотеку діаграм. Пам’ятайте, що це всього лише допомога, так що ви можете не неухильно слідувати всім рекомендаціям — використовуйте те, що вам зручно!

Нам потрібно завантажити скрипт Chart Google. Внесіть зміни в метод run(), щоб зареєструвати ще одне звернення:

public function run() {
add_action( ‘wp_dashboard_setup’, array( $this, ‘add_dashboard_widgets’ ) );
add_action( ‘admin_enqueue_scripts’, array($this, ‘add_asset’));
}
admin_enqueue_scripts — це дія, яку необхідно підключити для додавання власного сценарію консоль адміністратора. В клас для обробки скрипта завантаження ми додамо ще один виклик методу add_asset. Реалізація add_asset:
/**
* Додавання javascript
*/
function add_asset() {
wp_enqueue_script( ‘google chart’, ‘https://www.google.com/jsapi’ );
}

Тепер у нас є бібліотека діаграми. Після цього ми повинні вивести її в консолі. Ви можете поекспериментувати з Google Chart. Ми ж просто задіємо їх стандартний приклад:

function add_dashboard_widgets() {
syslog(LOG_DEBUG, «Run»);
wp_add_dashboard_widget(
‘hello_world_dashboard_widget’, // Жетон для ідентифікації віджету
‘Hello World’, //Заголовок віджету
function () {
echo <<<’EOD’
Hey, i’m the body of widget. Thanks for bring me to the life.
google.load(«visualization», «1», {packages:[«corechart»]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
[‘Task’, ‘Hours per Day’],
[‘Work’, 11],
[‘Eat’, 2],
[‘Commute’, 2],
[‘Watch TV’, 2],
[‘Sleep’, 7]
]);
var options = {
title: ‘Sample Pie Chart’,
is3D: true,
};
var chart = new google.visualization.PieChart(document.getElementById(‘hello_piechart’));
chart.draw(data, options);
}
EOD;
} //функція для виводу вмісту віджета, тут я використовую закриття
);

Ми просто додали ще один елемент DIV id hello_piechart і вивели діаграму в цьому елементі. Давайте подивимося, що у нас вийшло:

Основи налаштування консолі WordPress

Зверніть увагу на ідентифікатор елемента віджета. Тепер, коли ми знаємо, як додати власний блок віджета в консоль, і знаємо, як використовувати Google Chart для виведення інформації, ми можемо звести все це докупи, щоб показати більше інформації.

У наступному розділі ми дізнаємося, як захопити метрики сервера і вивести вміст для кожного типу метрик сервера, які ми розглядали раніше.

Витяг метрик сервера

При витяганні метрик сервера ми будемо використовувати для отримання цієї інформації команду Linux. В PHP, ми можемо використовувати апостроф « або shell_exec для виклику команди Shell і отримання вихідних даних.

Потім ми можемо розібрати виходять дані, щоб отримати метрики сервера. Наприклад, щоб отримати інформацію про використання дискового простору ми можемо використовувати команду df -h. Ми знаємо формат вихідних даних, так що ми можемо розібрати їх, щоб отримати те, що нам потрібно:

$df = `df -h`;
$df = explode(«n», $df);
if (is_array($df) && count($df)>=2) {
array_shift($df); //Get rid the first line
$df = array_map(function ($line) {
if (empty($line)) {
return NULL;
}
$segment=preg_split(‘/s+/’, $line);
return array(
‘filesystem’ => $segment[0],
‘size’ => $segment[1],
‘used’ => $segment[2],
‘available’ => $segment[3],
‘use_percent’ => $segment[4],
);
}, $df);
var_dump($df);
}

Отримання даних за допомогою AWK

Щоб спростити отримання даних прямо з команди Shell, ми можемо об’єднати її з awk.

Взагалі-то, їх об’єднання вимагає вивчення великої кількості інформації, когось це може навіть налякати, але ми просто використовуємо дуже невелику її частину. Повне пояснення awk виходить за рамки цієї статті.

Якщо ви захочете дізнатися про awk більше, ознайомтеся з цим джерелом.

В цілому ми використовуємо awk для обробки кожного рядка виводу, і в кожному рядку запису будуть розділені відступами або пробілами, а доступ до елементів може бути забезпечений через змінні: $ 1 для першого елемента, $ 2 — для другого і так далі.

Синтаксис:

[command_we_run] | awk ‘ { print $1, $3, …}’.

Давайте розглянемо наступний приклад:

☁ Server Dashboard [master] ls –lh
total 32
-rw-r—r— 1 kureikain staff 2.6 K Apr 11 00:46 Server Dashboard.php
drwxr-xr-x 3 kureikain staff 102B Mar 29 01:27 bin
-rw-r—r— 1 kureikain staff 98B Apr 5 18:53 loader.js
-rw-r—r— 1 kureikain staff 321B Mar 29 01:27 phpunit.xml
drwxr-xr-x 4 kureikain staff 136B Mar 29 01:27 tests
drwxr-xr-x 12 kureikain staff 408B Apr 13 17:37 widget
-rw-r—r— 1 kureikain staff 1.1 K Apr 6 01:04 widget.php
☁ Server Dashboard [master] ls -lh | awk ‘{print $3, $4, $5, $9}’
kureikain staff 2.6 K Server
kureikain staff 102B bin
kureikain staff 98B loader.js
kureikain staff 321B phpunit.xml
kureikain staff 136B tests
kureikain staff 408B widget
kureikain staff 1.1 K widget.php

Як ви можете бачити, кожна рядок ls -la містить дев’ять полів, розділених пробілами:

drwxr-xr-x 4 kureikain staff 136B Mar 29 01:27 tests

Це:

  • drwxr-xr-x
  • 4
  • kureikain
  • staff
  • 136B
  • Mar
  • 29
  • 01:27
  • Tests

Я можу використовувати awk, щоб отримати ім’я, групу, розмір і ім’я файлу / папки з відповідних полів 3, 4, 5, 9 awk ‘{print $3, $4, $5, $9} ‘ і отримаю:

kureikain staff 136B tests

Тому, з допомогою awk ми можемо опрацювати вихідну інформацію перед її передачею у функції обробки PHP.

Фільтрація даних за допомогою GREP

Деякі дані, що містяться на виході після виконання команди, нам не потрібні, тому необхідна додаткова обробка за допомогою PHP, щоб відфільтрувати їх.

Наприклад:

[vagrant@vagrant-centos64 ~]$ free –m
total used free shared buffers cached
Mem: 589 537 51 0 8 271
-/+ buffers/cache: 258 330
Swap: 255 255 0

free -m відображає дані про використання оперативної пам’яті — фізичної пам’яті і файлу підкачки; однак це поле включає в себе дві інші рядки: всього / використовується / вільно і — / + буфер / кеш, які нам не потрібні.

Ми хочемо витягти тільки інформацію про фізичної пам’яті і файл підкачки, тобто дані рядка 3 та рядка 5. Це можна зробити з допомогою grep з перемикачем -E. Цей перемикач дозволяє використовувати для пошуку регулярні вирази.

Так як ми хочемо знайти рядок зі словами Mem і Swap, давайте поставимо їх наступним чином:
grep -E «Mem|Swap».

В результаті ми отримаємо:

[vagrant@vagrant-centos64 ~]$ free -m | grep -E «Mem|Swap»
Mem: 589 536 52 0 8 271
Swap: 255 255 0

Так набагато компактніше. Об’єднавши grep і awk, ми можемо відфільтрувати дані та отримати тільки ту інформацію, яка нам потрібна:

[vagrant@vagrant-centos64 ~]$ free -m | grep -E «Mem|Swap» | awk ‘{print $1, $2, $3, $4}’
Mem: 589 537 52
Swap: 255 255 0

Команди Linux для отримання інформації про сервер

Нам потрібні деякі команди, щоб витягнути метрики сервера, тому давайте відкриємо оболонку сервера і спробуємо набрати наведені нижче команди, щоб відразу побачити, як це працює.

Перевірка мережевого трафіку:

$netstat –in
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 5538339494 0 0 0 6216082004 0 0 0 BMRU
eth0:1 1500 0 — no statistics available — BMRU
eth1 1500 0 96707328840 0 0 0 102776317608 0 0 0 BMRU
eth2 1500 0 33 0 0 0 7 0 0 0 BMRU
lo 16436 0 29461422 0 0 0 29461422 0 0 0 LRU

Перевірка використання дискового простору:

df –h
Filesystem Size Used Avail Use% Mounted on
/dev/sda7 2.0 G 660M 1.3 G 35% /
/dev/sda8 1.0 T 632G 340G 66% /home
/dev/sda6 2.0 G 68M 1.9 G 4% /tmp
/dev/sda5 20G 1.5 G 18G 8% /var
/dev/sda2 20G 2.1 G 17G 12% /usr
/dev/sda1 194M 25M 160M 14% /boot
/dev/hdb1 459G 277G 159G 64% /backup
tmpfs 16G 0 16G 0% /dev/shm

Перевірка використання оперативної пам’яті:

free –m
total used free shared buffers cached
Mem: 32189 32129 59 0 419 9052
-/+ buffers/cache: 22656 9532
Swap: 32767 4 3276

Пізніше ми будемо використовувати й інші команди, але ті, що я навів вище, є фундаментальними, на їх прикладі ви можете побачити, яку інформацію про сервер ми можемо отримати прямо з командного рядка.

Створення віджета

Тепер нам потрібно буде трохи реорганізовувати наш вихідний клас, описаний у попередньому розділі. Зверніть увагу, що, хоча ми не розглядали їх, нам потрібно створити всі стандартні файли і папки в папці нашого плагіна.

По-перше, нам не потрібно включати файли вручну. Для цієї мети ми напишемо автозавантажувач класів. Коли відсутній клас ініціалізується, автозавантажувач буде перевіряти ім’я класу і включати вихідний файл, що містить визначення класу.

Ми будемо використовувати наступне простір імен: шлях і ім’я класу в якості імені файлу. Наприклад, клас foo простору імен AX StatBoard повинен розташовуватися в кореневій папці плагіна. Клас buzz простору імен AXStatBoardBar повинен розташовуватися в папці Barbuzz.php:

Основи налаштування консолі WordPress

Структура папок з просторами імен, іменами класів та іменами файлів автозавантаження.

Пам’ятаючи це, давайте приступимо до розробки методу автоматичного завантажувача:

_plugin_dir . strtolower(str_replace(‘\’, ‘/’, $classname) . ‘.php’);
if (!file_exists($filepath)) {
return false;
}
include $filepath;
}

/**
* Setup and variable intialize widget provider
*/
function __construct() {
$this->_plugin_dir = plugin_dir_path( __FILE__ ) ;
spl_autoload_register(array($this, ‘load_class’));
}

//..
}

Отже, що тут відбувається? Наш плагін використовує простір імен AXStatBoard. Таким чином, ми переконуємося, що запитуваний клас в рамках даного простору імен повинен оброблятися нашим плагіном, в іншому випадку автоматичний завантажувач не може його завантажити.

Потім ми прибираємо AXStatBoard з імені класу і замінюємо на шлях до папки плагіна. Зворотна коса риска в просторі імен замінюється на роздільник /, і до імені додається розширення php. Це означає, що простір імен буде використовуватися в якості шляху до папки, яка містить файл класу, і ім’я класу буде використовуватися в якості імені файлу.

Це відбувається, природно, тільки в тих випадках, якщо файл існує. Тепер ми у нас є автоматичний завантажувач, проте нам потрібно, щоб PHP знав, що він існує, і ми хочемо використати його. Для цього в PHP існує функція spl_autoload_register. Ми вставимо її в клас конструктора.

По-друге, давайте приступимо до розробки класу віджета. У нас є кілька типів метрик сервера, які необхідно відображати. Краще, якщо кожна метрика буде відображатися в окремому віджет, щоб ці блоки можна було сортувати, розташувати у відповідному порядку, налаштувати, приховати або показати. Додаючи інформацію в віджет, ми одночасно додаємо значення показати / приховати для кожної з метрик нашого плагіна.

Виходячи з того, що ви знайомі з функцією wp_add_dashboard_widget, нам потрібно задати для неї заголовок і вміст. Відповідно для кожного віджета буде задаватися клас для виведення заголовка та змісту. Ми назвемо ці класи Provider віджета.

Кожен провайдер віджета повинен визначати get_title () і get_content() для відображення вмісту.
З цією метою, ми створимо Provider інтерфейс, і наш клас провайдера віджета буде реалізувати цей інтерфейс. Нам також необхідно створити ще один метод виклику get_metric() для отримання даних сервера.

Створіть файл widget/provider.php з наступним вмістом:

Це інтерфейс. Нам потрібно, щоб кожен провайдер віджета реалізував цей інтерфейс, і тому ми забезпечуємо, щоб клас провайдера віджета завжди містив ці три методи.

Ми створимо ще один клас Widget для управління цими провайдерами. Ми створюємо класи провайдера, потім передаємо їх в клас Widget, клас Widget буде використовуватися в якості єдиного елемента, який буде запитувати провайдер, коли він нам потрібен.

Ми можемо просто помістити все це в основний файл плагіна і створити екземпляр класу з оператором new, коли це необхідно. Проте пізніше нам буде складно працювати з цим.

Коли ми розбиваємо будь-який елемент на більш дрібні рівні, нам буде простіше тестувати і доповнювати його. Після того, як ми забезпечимо, щоб всі провайдери управлялися одним класом, ми можемо використовувати цей клас, щоб зробити те ж саме для безлічі провайдерів.

Ми можемо легко додати інші провайдери просто створити об’єкт, який реалізує клас провайдера і пов’язати його з класом Widget.

Створіть в кореневій папці файл плагіна widget.php з наступним вмістом:

namespace AXStatBoard;
use AXStatBoardWidgetProvider;

class Widget {
const WIDGET_SLUG_PREFIX = ‘AX’;

protected $_providers = array();
protected static $_instance;

static function instance() {
return self::$_instance = self::$_instance ?: new self();
}

function __construct() {
}

/**
* Add a widget provider
* @param string widget name
* @param provider object to handle widget content rendering
*/
public function add_provider($name, Provider $handler) {
$this->_providers[$name] = $handler;
return $this;
}

/**
* Get all provider or a particular provider
*/
public function get_provider($name=NULL) {
if (!$name) {
return $this->_providers;
}
return $this->_providers[$name];
}

/**
* Register a widget to render it.
*/
public function register($name) {
$slugid = self::WIDGET_SLUG_PREFIX . $name;
$widget_provider = $this->get_provider($name);
if (empty($widget_provider)) {
return false;
}

wp_add_dashboard_widget(
$slugid,
$widget_provider->get_title(),
array($widget_provider, ‘get_content’));
return true;
}
}

Знову ж таки, ми використовуємо одиночний шаблон проектування для класу Widget. У двох словах наш метод можна описати так:

  • Метод add_provider додає об’єкт провайдера віджета в список провайдерів віджетів. Ми також використовуємо текстові вказівки, щоб бути впевненими, що об’єкт, який передається в add_provider, точно буде Провайдером, що реалізує інтерфейс провайдера;
  • Метод get_provider може повертати список всіх провайдерів або конкретного провайдера;
  • Метод register фактично реєструє наш об’єкт провайдера в WordPress для виведення віджет консолі за допомогою wp_add_dashboard_widget. Ідентифікатор елемента генерується на основі префікса, попередньо певної константи та імені класу віджета. Заголовок і вміст віджета витягується через функції провайдера get_title і get_content. Ми вже забезпечили, щоб вони реалізували інтерфейс провайдера. З допомогою цього методу реєстратора ми відокремлюємо реалізацію додати віджет в консоль. Все, що нам тепер потрібно зробити, це викликати метод register з ім’ям провайдера, який ми додали раніше з допомогою add_provider. З урахуванням цього нам не потрібно переходити до кожної точки wp_add_dashboard_widget, коли змінюється API WordPress, нам достатньо оновити функцію в одному місці.

Повертаємося до початкового основного файлу плагіна serverdashboard.php. Тепер нам потрібно ініціалізувати всі провайдери і додати їх у список провайдерів об’єкта Widget:

_plugin_dir = plugin_dir_path( __FILE__ ) ;
spl_autoload_register(array($this, ‘load_class’));
$this->_dashboard_widget = array(
‘server’,
‘cpu_load’,
‘ram’,
‘disk’,
‘diskio’,
‘software’,
‘ethernet’,
‘internetspeed’,
‘networkio’,
‘process’,
);
foreach ($this->_dashboard_widget as $item) {
if (!file_exists($this->_plugin_dir . ‘/widget/’ . $item . ‘.php’)) {
continue;
}
$classname = ‘AX\StatBoard\Widget\’ . ucwords($item);
Widget::instance()->add_provider($item, new $classname());
}
}

Ми поміщаємо всі класи провайдерів віджетів в просторі імен AXStatBoardWidget, тому вони будуть розташовуватися у папці віджета. Нам потрібно відстежувати дев’ять видів метрик, тому ми називаємо клас відповідно масиву _dashboard_widgets, наведеним вище.

Для кожного віджета ми створюємо новий примірник його провайдера і додаємо цей екземпляр в клас Widget. Відповідно от яку структуру файлів і папок ми отримали:

Основи налаштування консолі WordPress

Пам’ятайте, що ми підключили дію wp_dashboard_setup, всередині нього ми викликаємо функцію wp_add_dashboard_widget, щоб додати новий віджет в консоль. Далі, для цієї мети у нас є метод register.

Через цикл ми обробляємо всі додані провайдери і реєструємо їх. Внісши відповідні зміни в add_dashboard_widgets файлу serverdashboard.phpми отримаємо наступний код:

/**
* Реєстрація провайдера віджета консолі для виводу його на консоль
*/
function add_dashboard_widgets() {
$widget = Widget::instance();
foreach ($widget->get_provider() as $name=>$provider) {
$widget->register($name);
}
}

Далі, ми підключаємо admin_footer для виведення вбудованого JavaScript у нижній частині сторінки адміністратора для ініціалізації пакету класу Google Chart. Метод run() також оновлюється для нового підключення:

/**
* Звернення початку налаштування
*/
public function run() {
add_action( ‘wp_dashboard_setup’, array( $this, ‘add_dashboard_widgets’ ) );
add_action( ‘admin_enqueue_scripts’, array($this, ‘add_asset’));
add_action( ‘admin_footer’, array($this, ‘footer’));
}
/**
* Вбудований JavaScript
*/
function footer() {
echo’
google.load(«visualization», «1», {packages:[«corechart»]})
‘;
}

На даний момент в цілому ми закінчили, наш основний файл плагіна повинен виглядати наступним чином:

_plugin_dir . strtolower(str_replace(‘\’, ‘/’, $classname) . ‘.php’);
if (!file_exists($filepath)) {
return false;
}
include $filepath;
}
/**
* Встановлення змінної та ініціалізація провайдера віджету
*/
function __construct() {
$this->_plugin_dir = plugin_dir_path( __FILE__ ) ;
spl_autoload_register(array($this, ‘load_class’));
$this->_dashboard_widget = array(
‘server’,
‘cpuload’,
‘ram’,
‘disk’,
‘software’,
‘process’,
‘ethernet’,
‘networkio’,
‘iostat’,
);
foreach ($this->_dashboard_widget as $item) {
if (!file_exists($this->_plugin_dir . ‘/widget/’ . $item . ‘.php’)) {
continue;
}
$classname = ‘AX\StatBoard\Widget\’ . ucwords($item);
Widget::instance()->add_provider($item, new $classname());
}
}
/**
* Створення унікального екземпляра об’єкта через додаток
*/
public static function instance() {
return self::$_instance = self::$_instance ?: new self();
}
/**
* Звернення початку налаштування
*/
public function run() {
add_action( ‘wp_dashboard_setup’, array( $this, ‘add_dashboard_widgets’ ) );
add_action( ‘admin_enqueue_scripts’, array($this, ‘add_asset’));
add_action( ‘admin_footer’, array($this, ‘footer’));
}
/**
* Реєстрація провайдера віджета консолі для виводу його на консоль
*/
function add_dashboard_widgets() {
$widget = Widget::instance();
foreach ($widget->get_provider() as $name=>$provider) {
$widget->register($name);
}
}
/**
* Завантаження елементів: таблиці стилів, JS.
*/
function add_asset() {
syslog(LOG_DEBUG, «Loaded»);
wp_enqueue_script( ‘google chart’, ‘https://www.google.com/jsapi’ );
//wp_enqueue_script( ‘plugin_dir_url’, plugin_dir_url(__FILE__) . ‘/loader.js’);
}
/**
* Вбудований JavaScript
*/
function footer() {
echo’
google.load(«visualization», «1», {packages:[«corechart»]})
‘;
}
}
Dashboard::instance()->run();

Ми створюємо екземпляр класу основного плагіна і викликаємо метод виконання. Що в свою чергу ставить створення списку звернень. Кожне звернення — це ще один метод всередині класу. Ми також зареєструємо об’єкт провайдера з об’єктом Widget.

Що далі?

На даний момент, ми поки ще не можемо нічого вивести; однак, ми поставили структуру плагіна і приступили до прив’язки його до Google Charts.

Ви можете завантажити повний скрипт на посилання для скачування у верхній частині статті. У наступній статті ми детально розглянемо кожен провайдер віджета, тому не пропустіть її.

Я сподіваюся, вам сподобалася ця стаття. Напишіть в коментарях, що ви з цього приводу думаєте, і я постараюся відповісти кожному.

Переклад статті «The Fundamentals of Building a WordPress Server Dashboard» був підготовлений дружною командою проекту Сайтостроение від А до Я.