Глобальні змінні у WordPress
Ми часто використовуємо функції, щоб отримати якісь дані на сторінці і не підозрюємо, що ці дані можна взяти з глобальних змінних. Наприклад, ім’я автора на сторінці автора. А іноді ми просто не знаємо, як отримати потрібні дані, де вони знаходяться. Ця стаття розповість про те, як отримати всі важливі дані поточної сторінки зі змінних PHP, які вже встановлені в WordPress. Такі дані залишається лише взяти…
Зауважу, якщо є рівнозначний варіант отримати дані через функцію, то краще отримує через функцію. Тому що це може позбавити багів у майбутньому – при оновленні в наступних версіях, назва глобальної змінної може змінитися. А те, що змінити назву функції – це мало ймовірно. До того ж, змінені функції не видаляються, а йдуть у розділ заборонені, але, як і раніше, продовжують працювати… Ось такий приклад:
// поточного користувача можна отримати через глобальну змінну Global $current_user; // або через функцію, що краще $current_user = wp_get_current_user();
Дивіться також константи у WordPress
Що таке глобальні змінні?
Це змінні PHP, які «видно» скрізь.
Щоб отримати доступ до глобальної змінної перед нею, потрібно вказати ключове слово global :
<?php Global $cat; echo $cat;
Або можна використовувати суперглобальний масив $GLOBALS :
<?php echo $GLOBALS['cat']; ?>
Глобальні змінні – це звичайні змінні, визначені в глобальній області (основній частині) PHP. Щоб зрозуміти що таке глобальна область, уявіть перший php файл, зазвичай це index.php – це глобальна область коду (глобальна область видимості). Якщо в такому файлі визначити змінну, вона автоматично стане глобальною. Але якщо у такому файлі створити функцію та визначити змінну всередині цієї функції, то вона буде локальною — область видимості такої змінної не виходить за межі функції. Те саме стосується класів та їх методів (функцій).
А якщо в «глобальний» файл підключається інший файл? Допустимо, до головного файлу index.php ми підключаємо ще один файл wp-load.php – require_once 'wp-load.php';
. Код цього підключеного файлу також стає глобальним, і змінні безпосередньо визначені у цьому файлі автоматично стають глобальними.
Розглянемо з прикладу. Припустимо, код нижче ми вставляємо у файл теми functions.php , який у свою чергу підключається до глобальної області видимості та будь-які змінні вказані в ньому безпосередньо, стають глобальними.
<?php $var = 'Привіт мир!'; // Ця змінна стає глобальною //функція function my_func(){ echo $var; } my_func(); // виклик: отримаємо помилку рівня Notice, // тому що в області видимості функції немає змінної $var //функція function my_func2(){ global $var; // визначимо $var глобально // тепер $var це глобальна змінна echo $var; // Привіт світ! // Змінимо змінну - зміниться глобальна змінна $ var = 'Поки світ'; } my_func2(); // виведе: 'Привіт світ!' // Виведемо змінну $var за межами функцій echo $var; // виведе: 'Поки що мир' // тому що ми змінили глобальну $var функції my_func2()
Цей код пояснює суть глобальних змінних, як вони помітні і не помітні всередині функцій.
Глобальну змінну можна створити з локальної області видимості, наприклад, з функції:
<?php echo $var; // Викличе помилку - змінна не визначена function my_func2(){ global $var; // Створимо глобальну змінну $var $var = 'Привіт мир'; } my_func2(); // Викликаємо функцію echo $var; // виведе 'Привіт світ'
Примітка: ключове слово global виставляє посилання на вказану змінну, а не створює нову. Наступні конструкції еквівалентні:
global $var; // Теж саме що $var = & $GLOBALS['var'];
Важливо! Використовувати глобальні змінні потрібно обережно!
Глобальних змінних дуже багато, і їх легко змінити. Наприклад, якщо спочатку файли теми header.php написати $id = 2; , то глобальна змінна $id , яка містила ID поточного запису змінитись і використовувати його вже не можна!
Подібним чином тема чи плагіни можуть змінювати глобальні змінні. Але все ж таки, серед глоб. змінних є, скажімо так «зайняті», про які повинен знати кожен розробник і не повинен використовувати їх як глоб. змінних під час створення плагіна чи теми. Саме цей список і наведено у цій статті.
Змінні не з цієї статті використовувати у коді не рекомендую. Замість них слід знайти альтернативне рішення отримати потрібні дані, наприклад, за допомогою відповідної функції.
Глобальні змінні у WordPress
Під час генерації сторінки WordPress отримує купу даних і важливі з них зберігаються в глобальних змінних. Наприклад:
- ID рубрики на сторінці рубрики – $cat .
- Або всі отримані посади на сторінці рубрик – $wp_query .
- Або об’єкт посту на сторінці посту – $post .
Таким чином, у WordPress створюється купа глобальних змінних, які можна використовувати у своєму коді. Розглянемо найважливіші їх нижче.
Загальні змінні
-
$wp_rewrite
(об’єкт) -
Зберігає все про правила перезапису URL-адрес. Глобальний екземпляр класу
WP_Rewrite . Встановлюється у файлі wp-setings.php до події
setup_theme . -
$wp_scripts
(WP_Scripts) -
Зберігає всі підключені та поставлені на виведення скрипти. Глобальний екземпляр класу
WP_Scripts . -
$wp_styles
(WP_Styles) -
Зберігає всі підключені та поставлені на висновок стилі. Глобальний екземпляр класу
WP_Styles . -
$wpdb
(об’єкт) -
Зберігає поточне підключення до бази даних. Глобальний екземпляр класу
wpdb . Дозволяє спілкуватися з базою даних. -
$table_prefix
(рядок) - Префікс таблиці у базі даних.
-
$wp_admin_bar
(WP_Admin_Bar) - Усі дані адмін бару.
-
$wp_meta_boxes
(масив) - Об’єкт усіх зареєстрованих метабоксів. Містить їх ID, параметри (args), функції зворотного виклику (callback) та заголовки всіх типів записів, включаючи довільні.
- Всі дані про зареєстровані області для сайдбару.
-
$wp_registered_widgets
(масив) - Дані всіх зареєстрованих віджетів.
-
$wp_registered_widget_controls
(масив) - ____
-
$wp_registered_widget_updates
(масив) - ____
-
Допустимі HTML теги при публікації запису. Список дивіться у файлі
wp-includes/kses.php . -
Допустимі HTML теги при коментуванні. Список дивіться у файлі
wp-includes/kses.php . -
$wp_filter
(масив) - Усі хуки WordPress.
-
$wp_actions
(масив) - Масив із назвами подій в індексі та кількістю скільки разів спрацювала подія у значенні.
-
$wp_object_cache
(WP_Object_Cache) -
Весь об’єктний кеш. Він зберігається так, коли не встановлений плагін об’єктного кешу… Глобальний екземпляр класу
WP_Object_Cache . - Усі зареєстровані шорткоди та їх дані.
-
$wp_embed
(WP_Embed) Клас, що відповідає за вбудовування об’єктів. Наприклад, коли в тексті статті з посилання на youtube відео створюється HTML код цього відео. Змінна містить екземпляр класу WP_Embed .
В основі роботи цього класу лежить клас _wp_oembed_get_object() . Окремо цей об’єкт не має глобальної змінної.
-
$wp_oembed
(WP_oEmbed) -
Такої глобальної змінної немає! Отримати об’єкт
WP_oEmbed можна за допомогою функції:
_wp_oembed_get_object() . -
$wp_taxonomies
(масив) - Дані всіх таксономій.
-
$wp_post_types
(масив) -
Дані всіх типів записів. Масив об’єктів
WP_Post_Type -
$l10n
(масив) -
Масив усіх перекладів. Містить об’єкти
MO класу , отримані з файлів
.mo . Дивіться
load_textdomain() . -
$l10n_unloaded
(масив) -
Масив доменів, переклади для яких було вивантажено (скасовано). Масив із елементами:
'domain' => true
. Дивіться
unload_textdomain() . -
$wp_post_statuses
(масив) -
Масив даних про всі статуси записів.
publish ,
future і т.д. -
$current_user
(WP_User) -
Об’єкт даних поточного користувача – екземпляр
WP_User . Деякі дані винесені до окремих глобальних змінних для швидкого доступу:
$user_login ,
$user_ID ,
$user_email ,
$user_url ,
$user_identity (зазвичай логін). -
$wp_roles
(WP_Roles) - Усі дані ролей користувачів на сайті.
-
$wpsmiliestrans
(масив) -
Масив спеціальних рядків, які можна перевести до смайликів. Переклад тексту до смайликів.
:x
в смайлик,
:|
смайлик і т.д. -
$super_admins
(масив) -
Масив ID користувачів, які мають додаткові права супер-адміністратора у
MU складання . Ця глобальна змінна встановлюється власником сайту (наприклад, у файлі
wp-config.php ). Якщо встановлено, змінна переписує (перебиває) список супер-адмінів у базі даних. -
$content_width
(число) - Встановлює ширину вмісту сайту. Використовується у файлі functions.php.
-
$wp_filesystem
(об’єкт) Примірник підібраного об’єкта WP_Filesystem_Base , що розширює клас , для роботи з файлами на сервері. Примірником може бути один із класів: WP_Filesystem_Direct , WP_Filesystem_FTPext , WP_Filesystem_ftpsockets , WP_Filesystem_SSH2 .
Змінна встановлюється функцією WP_Filesystem() .
-
$wp_theme_directories -
Масив у якому зберігаються шляхи до папок, де знаходяться теми. Зазвичай там лише один шлях. Створюється змінна функцією
register_theme_directory() .
Локалізація (переклад)
-
$wp_locale
(WP_Locale) -
Дані поточної локалі сайту (мова сайту). Глобальний екземпляр
класу WP_Locale . -
$locale
(рядок) -
Локаль сайту, наприклад
ru_RU . -
$weekday
(масив) -
Масив усіх днів тижня переведений на поточну локаль.
[ __('Sunday'), __('Monday'), ... ]
-
$weekday_initial
(масив) -
Масив першої літери всіх днів тижня переведений на поточний локаль.
[ __('Sunday') => __('S'), __('Monday') => __('M'), ... ]
-
$weekday_abbrev
(масив) -
Масив скорочених назв усіх днів тижня переведений на поточну локаль.
[ __('Sunday') => __('Sun'), __('Monday') => __('Mon'), ... ]
-
$month
(масив) -
Масив усіх місяців переведених на поточну локаль.
[ __('January'), __('February'), ... ]
-
$month_abbrev
(масив) -
Масив скорочених назв усіх місяців переведених на поточну локаль.
[ __('January') => __('Jan'), __('February') => __('Feb'), ... ]
Основний запит WordPress
ВАЖЛИВО! Не використовуйте у своєму коді назви наведених нижче змінних, тому що вони використовуються ядром WordPress. А якщо ви все ж таки їх використовуєте, то ви повинні розуміти що робите.
Основний запит робиться функцією WP::main() .
-
$wp
(WP) -
Зберігає поточний запит WordPress – екземпляр
WP класу , в якому вказані параметри запиту отримані з URL.
Змінні нижче встановлюються за допомогою WP::main() .
-
$wp_query
(WP_Query) -
$wp_the_query
(WP_Query) Зберігає результат глобального запиту – екземпляр класу query_posts() .
$wp_the_query завжди повинна дорівнювати $wp_query. Якщо хтось використовував у своєму коді функцію wp_reset_query() .
-
$query_string
(string) - Рядок (параметри) поточного запиту.
-
$posts
(array) - Усі посади основного запиту WP_Query.
-
$post
(WP_Post|null) -
Об’єкт
WP_Post поточного запису. Якщо сторінка передбачає виведення постів чи посту. -
$request
(string) - SQL запит на отримання всіх записів поточної сторінки.
-
$more
(int) -
1, коли спрацьовує умова –
is_single() ||
is_page() . -
$single
(int) -
Чи є сторінка запису поточна сторінка. 1, коли спрацьовує умова –
is_single() ||
is_page() . -
Дані користувача
get_userdata() . Встановлюється лише на сторінці автора
is_author() .
Також методом WP::register_globals() у глобальні змінні витягуються всі змінні основного запиту WP_Query:
// Extract updated query vars back in global namespace. foreach ((array) $wp_query->query_vars as $key => $value ) { $GLOBALS[ $key ] = $value; }
Дивіться WP_Query::fill_query_vars() :
$attachment $attachment_id $author $author__in $author__not_in $author_name $cat $category__and $category__in $category__not_in $category_name $day $embed $error $favicon $feed $fields $hour $m $menu_order $meta_key $meta_value $minute $monthnum $name $p $page $page_id $paged $pagename $post__in $post__not_in $post_name__in $post_parent $post_parent__in $post_parent__not_in $post_status $post_type $preview $robots $s $second $sentence $subpost $subpost_id $tag $tag__and $tag__in $tag__not_in $tag_id $tag_slug__and $tag_slug__in $tb $title $w $withcomments $withoutcomments $year
Усередині циклу WordPress
У циклі записів
Ці глобальні змінні можна використовувати всередині циклу WordPress . Вони змінюються під час перебору елементів у циклі. Всі вони містять інформацію про поточний запис (пост) у циклі.
Встановлюються методом setup_postdata() .
-
$post
(WP_Post) - Об’єкт поточного запису (поста). На сторінці запису – це сам запис. На сторінці рубрики це поточний запис у циклі.
-
Об’єкт автора поточного запису. Об’єкт описаний у
WP_User . -
$currentday
(рядок) - День, коли було опубліковано поточну посаду.
-
$currentmonth
(рядок) - Місяць, коли було опубліковано поточну посаду.
-
$page
(число) -
Сторінка поточного запису, коли
пост розділений на сторінки , використовуючи тег
<!–nextpage–> . -
$pages
(масив) -
Контент сторінок поточного запису (поста). Кожна сторінка розділяється за допомогою тега
<!–nextpage–> . -
$multipage
(логічний) -
Визначає, чи розділяється поточний запис на сторінки за допомогою тега
<!–nextpage–> . Містить true або false. -
$numpages
(число) -
Кількість сторінок, якщо запис розділений на сторінки за допомогою тега
<!–nextpage–> . -
$more
(логічний) -
Чи є тег
<!–more–> у записі.
У циклі коментарів
-
Об’єкт поточного коментаря у циклі. Приклад такого об’єкта дивіться в описі
get_comment()
В лицьовій частині (фрон-енде)
-
$template
(рядок) -
Шлях до файлу шаблону, який відповідає за виведення HTML-коду поточної сторінки. Наприклад:
C:/sites/example.com/www/wp-content/themes/twentyfifteen/archive.php
В адмін-панелі
-
$current_screen
(масив) -
Дані поточного екрана адмінки. get_current_screen
() -
$pagenow
(рядок) Визначає, на якій сторінці ми зараз знаходимося – поточну сторінку адмін-панелі. Зберігає назву php-файлу, який обробляє поточну сторінку. Наприклад , options-general.php . Береться останній елемент, що отримується з
$_SERVER['PHP_SELF']
і де потрібно значення стандартизується.Встановлюється змінна рано відразу після події plugins_loaded .
Змінна також встановлюється у фронті, тільки там вона майже завжди містить index.php або wp-login.php .
-
$post_type
(рядок) - Тип запису в адмінці. На сторінці запису чи таксономії.
-
Масив даних з елементами меню адмінки, які були додані через
add_menu_page() . Містить масив масивів даних кожного меню. -
Масив даних з елементами підменю адмінки, які були додані через
add_submenu_page() . Містить масив масивів даних кожного підменю. -
$admin_page_hooks
(масив) Елементи головного меню адмінки у масиві. Де індекс масиву це ID меню, яке вказується у четвертому параметрі add_menu_page() .
Майже те саме, що $menu, тільки це індексний масив.
Приклад:
Array( [index.php] => dashboard [separator1] => separator1 [upload.php] => media [link-manager.php] => links [edit-comments.php] => comments [edit.php] => posts [edit.php?post_type=page] => pages [separator2] => separator2 [themes.php] => appearance [plugins.php] => plugins [users.php] => users [tools.php] => tools [options-general.php] => settings [separator-last] => separator-last [woocommerce] => woocommerce )
Змінні версії
-
$wp_version
(рядок) - Поточна версія WordPress
-
$wp_db_version
(число) - Поточна версія бази даних
-
$tinymce_version
(рядок) - Поточна версія редактора TinyMCE
-
$manifest_version
(рядок) - Версія маніфесту кешу
-
$required_php_version
(рядок) - Мінімальна версія PHP, яка потрібна для поточного WordPress
-
$required_mysql_version
(рядок) - Мінімальна версія MySQL , яка потрібна для поточного WordPress
Змінні браузерів
Ці змінні містять дані про поточний браузер, який використовує користувач.
-
$is_iphone
(логічний) - iPhone Safari
-
$is_chrome
(логічний) - Google Chrome
-
$is_safari
(логічний) - Safari
-
$is_NS4
(логічний) - Netscape 4
-
$is_opera
(логічний) - Opera
-
$is_macIE
(логічний) - Mac Internet Explorer
-
$is_winIE
(логічний) - Windows Internet Explorer
-
$is_gecko
(логічний) - FireFox
-
$is_lynx
(логічний) - Linux
-
$is_IE
(логічний) - Глобальна змінна визначається WordPress і використовується для визначення того, чи браузер Internet Explorer.
-
$is_edge
(логічний) - Microsoft Edge
Змінні веб-сервера
Ці глобальні змінні містять дані, на якому сервері працює WordPress.
-
$is_apache
(логічний) - Apache HTTP Server
-
$is_IIS
(логічний) - Microsoft Internet Information Services (IIS)
-
$is_iis7
(логічний) - Microsoft Internet Information Services (IIS) v7.x