Глобальні змінні у 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.phprequire_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_sidebars
(масив)
Всі дані про зареєстровані області для сайдбару.

$wp_registered_widgets
(масив)
Дані всіх зареєстрованих віджетів.

$wp_registered_widget_controls
(масив)
____

$wp_registered_widget_updates
(масив)
____

$allowedposttags
(масив)
Допустимі HTML теги при публікації запису. Список дивіться у файлі
wp-includes/kses.php .

$allowedtags
(масив)
Допустимі HTML теги при коментуванні. Список дивіться у файлі
wp-includes/kses.php .

$wp_filter
(масив)
Усі хуки WordPress.

$wp_actions
(масив)
Масив із назвами подій в індексі та кількістю скільки разів спрацювала подія у значенні.

$wp_object_cache
(WP_Object_Cache)
Весь об’єктний кеш. Він зберігається так, коли не встановлений плагін об’єктного кешу… Глобальний екземпляр класу
WP_Object_Cache .

$shortcode_tags
(масив)
Усі зареєстровані шорткоди та їх дані.

$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() .

$authordata
(WP_User)
Дані користувача
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)
Об’єкт поточного запису (поста). На сторінці запису – це сам запис. На сторінці рубрики це поточний запис у циклі.

$authordata
(WP_User)
Об’єкт автора поточного запису. Об’єкт описаний у
WP_User .

$currentday
(рядок)
День, коли було опубліковано поточну посаду.

$currentmonth
(рядок)
Місяць, коли було опубліковано поточну посаду.

$page
(число)
Сторінка поточного запису, коли
пост розділений на сторінки , використовуючи тег
<!–nextpage–> .

$pages
(масив)
Контент сторінок поточного запису (поста). Кожна сторінка розділяється за допомогою тега
<!–nextpage–> .

$multipage
(логічний)
Визначає, чи розділяється поточний запис на сторінки за допомогою тега
<!–nextpage–> . Містить true або false.

$numpages
(число)
Кількість сторінок, якщо запис розділений на сторінки за допомогою тега
<!–nextpage–> .

$more
(логічний)
Чи є тег
<!–more–> у записі.


У циклі коментарів


$comment
(WP_Comment)
Об’єкт поточного коментаря у циклі. Приклад такого об’єкта дивіться в описі
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


Мультисайт


$blog_id
(число)
ID поточного блогу

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *