


Блог IT-шника
Блог IT-шника
Привіт:) У цьому пості покажу інструменти для відлагодження коду, які використовую під час розробки WordPress проєктів.
WordPress — це окреме середовище та складна система із великою кількістю коду в багатьох файлах. Різні модулі взаємодіють між собою, викликаючи функціонал один одного. Також ядро ВордПрес містить комплекс інструментів, які дозволяють розширювати стандартні можливості системи, а також розробляти власні рішення (плагіни, теми, блоки Gutenberg-редактора).
Під час розробки виникають помилки, які не завжди вдається одразу виявити. Також буває необхідно зрозуміти логіку роботи якогось функціоналу. Щоб полегшити та пришвидшити процес розробки використовуються різні інструменти відлагодження коду. У цій статті покажу ті, якими користуюся сам.
до змісту ↑У ядрі WordPress вже вбудований потужний інструмент відлагодження (debug-режим), якого часто буває достатньо для написання нескладної логіки чи функціоналу. Його основна задача — збирати всі помилки роботи PHP-скриптів (мова, на основі якої працює ядро WordPress).
За замовчуванням відлагоджувач вимкнений (див. Як увімкнути режим відлагодження (дебагу) WordPress).
до змісту ↑Для ВордПрес існують плагіни, які дозволяють:
Особисто користуюся плагіном Query Monitor (https://wordpress.org/plugins/query-monitor/). У зручному форматі показує наступну інформацію:
SELECT
, UPDATE
, DELETE
і т.п.);is_single()
, is_home()
і т.п.).Для перевірки роботи PHP-скриптів використовую наступні способи.
Для цього використовую PHP_функцію error_log()
:
error_log( $value );
error_log( print_r( $value, 1 ) );
до змісту ↑
Для цього користуюся PHP-функціями print_r()
та var_dump()
. Вони виведуть у зручному форматі будь-які дані (рядок, масив, об'єкт, результат роботи функції).
echo '<pre>';
print_r( $value );
echo '</pre>';
echo '<pre>';
var_dump( $value );
echo '</pre>';
phpversion();
Таку інформацію можна дізнатися за допомогою плагіну Query Monitor. Також назву файлу-шаблону можна вивести на екран кодом:
// Варіант 1. Повідомлення будуть виводитися в адмін-барі
add_action( 'admin_bar_menu', function() {
if ( is_super_admin() ) {
global $template;
print_r( $template );
}
} );
// Варіант 2. Повідомлення будуть виводитися у Футері
add_action( 'wp_footer', function() {
if ( is_super_admin() ) {
global $template;
print_r( $template );
}
} );
// Варіант 3. Повідомлення у Футері який файл шаблону теми використовується + ID поточного посту
add_action( 'wp_footer', function() {
if ( is_super_admin() ) {
global $template;
echo 'Template Name: ' . $template . "<br>";
global $wp_query;
echo 'Post ID: ' . $wp_query->post->ID;
}
} );
до змісту ↑
Виведення списку назв усіх функцій/методів, які були викликані для того, щоб дістатися поточного місця в коді (звідки була викликана функція нижче). Список виводиться у вигляді назв функцій через кому або у вигляді масиву.
// Виведення результату роботи функції на екран
print_r( wp_debug_backtrace_summary() );
// Виведення результату роботи функції у файл /wp-content/debug.log
error_log( wp_debug_backtrace_summary() );
до змісту ↑
Розміри зображень реєструються ядром WordPress, темами та плагінами.
За замовчуванням у WordPress автоматично створюються декілька розмірів мініатюр: thumbnail, medium, medium_large, large. До цих розмірів можна додавати власні за допомогою функції add_image_size()
. Детальніше див. Як створити додаткові розміри зображень у WordPress.
Щоб отримати всі додаткові розміри, користуюся наступними способами.
Наприклад, десь у коді теми чи плагіну реєструється окремий розмір мініатюр для картки слайдеру:
add_image_size( 'slider-item-thumb', 250, 250 );
Щоб подивитися цей розмір:
// Спосіб 1
echo '<pre>';
print_r( wp_get_additional_image_sizes() );
echo '</pre>';
// Спосіб 2
global $_wp_additional_image_sizes;
echo '<pre>';
print_r( $_wp_additional_image_sizes );
echo '</pre>';
Результат роботи обох способів:
Array
(
[slider-item-thumb] => Array
(
[width] => 250
[height] => 250
[crop] =>
)
)
до змісту ↑
У процесі розробки плагіну чи теми буває необхідно перевірити роботу того чи іншого функціоналу для різних користувачів. Наприклад, окремо для користувачів з повним доступом і для тих, які мають обмежені права (наприклад, Редактор).
Для цього користуюся безкоштовним модулем User Switching (https://wordpress.org/plugins/user-switching/). Дозволить швидко перемикати між обліковими записами користувачів одним натисканням кнопки. Забезпечує миттєвий вихід із системи та вхід під потрібним користувачем.
до змісту ↑У ході робіт з оптимізації швидкості роботи сайту буває потрібно визначити час, протягом якого генерується сторінка, а також кількість оперативної пам'яті, яку витрачає сервер хостингу для цього процесу.
Щоб визначити кількість SQL-запитів до бази даних, час їх виконання та затрачену пам'ять для генерації сторінки, використовую наступний код:
if ( ! function_exists( 'mp_get_resources_usage' ) ) {
add_filter( 'admin_footer_text', 'mp_get_resources_usage' );
function mp_get_resources_usage() {
if ( current_user_can( 'manage_options' ) ) {
return sprintf(
'SQL-запити: %d шт. за %.3F сек. %s MB',
get_num_queries(),
timer_float(),
round( memory_get_peak_usage()/1024/1024, 2 )
);
}
}
}
Результатом роботи буде інформація внизу адмін-панелі WordPress:
SQL-запити: 46 шт. за 0.552 сек. 61.37 MB
Щоб додати цю інформацію в адмін-бар:
if ( ! function_exists( 'mp_get_resources_usage' ) ) {
function mp_get_resources_usage() {
if ( current_user_can( 'manage_options' ) ) {
return sprintf(
'SQL-запити: %d шт. за %.3F сек. %s MB',
get_num_queries(),
timer_float(),
round( memory_get_peak_usage()/1024/1024, 2 )
);
}
}
}
if ( ! function_exists( 'mp_resources_usage_to_admin_bar' ) ) {
add_action( 'admin_bar_menu', 'mp_resources_usage_to_admin_bar', 99999 );
function mp_resources_usage_to_admin_bar( $admin_bar ) {
$args = array(
'id' => 'mp-resources-usage-info',
'title' => mp_get_resources_usage(),
'href' => ''
);
$admin_bar->add_node( $args );
}
}
Також цю інформацію можна дізнатися за допомогою плагіну Query Monitor.
до змісту ↑Для контролю та відлагодження коду на JavaScript або jQuery зазвичай користуюся console.log().
Режим Maintenance Mode у WordPress — це стан, коли сайт тимчасово недоступний для публічного перегляду. Цей режим активується у випадках, коли розробник або адміністратор сайту проводить ремонтні або оновлювальні роботи, такі як зміни у дизайні, оновлення плагінів або тем, чи ж великі оновлення ядра WordPress.
Режим Maintenance Mode потрібен у наступних випадках.
У WordPress режим обслуговування можна активувати за допомогою плагінів (наприклад, LightStart – Maintenance Mode [https://wordpress.org/plugins/wp-maintenance-mode/]) або безпосередньо в коді. Після завершення робіт необхідно деактивувати режим обслуговування, щоб сайт знову став доступним для відвідувачів.
до змісту ↑ВордПрес має вбудовані інструменти для ремонту/відновлення/оптимізації пошкодженої бази даних.
define('WP_ALLOW_REPAIR', true);
site.com/wp-admin/maint/repair.php
У коді замість site.com вкажіть назву домену свого сайту.
Після закінчення процесу ремонту/оптимізації система видасть відповідне повідомлення.