WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Глобальные переменные в 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_query(объект)
Хранит запрос на записи текущей страницы. Глобальный экземпляр класса WP_Query.
$wp_rewrite(объект)
Хранит все о правилах перезаписи URL. Глобальный экземпляр класса WP_Rewrite.
$wp(объект)
Хранит текущий запрос самого WordPress, где указаны параметры запроса полученные из URL и т.д.. Глобальный экземпляр класса WP.
$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 теги при публикации записи.
$allowedtags(массив)
Допустимые HTML теги при комментировании.
$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 - он содержит в себе основную функциональность встраиваний, а WP_Embed это своего рода обертка. Получить объект WP_oEmbed можно через функцию: _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. Они меняются по ходу перебора элементов в цикле. Все они содержат информацию о текущей записи (посте) в цикле.

$posts(массив)
Все посты текущего цикла. Массив объектов WP_Post. Эта переменная не меняется внутри цикла, но она напрямую к нему относится, поэтому она тоже в этом списке.
$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()

Все переменные запроса WP_Query

Основной запрос WP_Query сохраняется в глоб. переменную $wp_query. А все переменные этого запроса, выносятся в отдельные глобальные переменные. Таким образом, мы можем получать данные из глобальной области.

Ниже список таких переменных, но использовать их я не рекомендую, потому что названия у большинства из них совсем не уникальные (популярные):

  • $author_name - Имя автора (на странице автора)
  • $author - ID автора (на странице автора)
  • $post_parent - ID родительского поста. Для вложений и древовидных записей.
  • $subpost
  • $subpost_id
  • $attachment
  • $attachment_id
  • $pagename - ярлык страницы (на странице страницы)
  • $page_id - ID страницы (на странице страницы)
  • $hour - час (на странице архива даты)
  • $day - день (на странице архива даты)
  • $monthnum - номер месяца (на странице архива даты)
  • $year - год (на странице архива даты)
  • $w - номер дня недели (на странице архива даты)
  • $category_name - название рубрики
  • $tag - название метки
  • $cat - ID рубрики
  • $tag_id - ID метки
  • $s - запрос поиска (на странице поиска).
  • $post_type - Тип записи (на странице записи)
  • $paged - Номер страница пагинации.
  • $posts_per_page - Кол-во записей на страницу.
  • $comments_per_page - Кол-во комментариев на страницу.
  • $query_string - Строка (параметры) текущего запроса.
  • $posts - Все записи текущего запроса WP_Query
  • $post - Объект текущей записи. ID текущей записи: $post->ID
  • $preview - true, если предпросмотр записи.
  • $request - последний SQL запрос на получение всех записей.
меню

В лицевой части (фрон-энде)

$template(строка)
Путь к файлу шаблона, который отвечает за вывод HTML кода текущей страницы. Например: C:/sites/wptest.ru/www/wp-content/themes/twentyfifteen/archive.php

В админ-панели

$current_screen(массив)
Данные текущего экрана админки. См. get_current_screen()
$pagenow(строка)

Определяет на какой странице мы сейчас находимся - текущую страницу админ-панели. Хранит название php файла, который обрабатывает текущую страницу. Например options-general.php. Берется последний элемент получаемый из $_SERVER['PHP_SELF'] и где нужно значение стандартизируется.

Устанавливается переменная рано, сразу после события muplugins_loaded, но до события plugins_loaded.

Переменная также устанавливается и во фронте, только там она почти всегда содержит index.php или wp-login.php.

меню
$post_type(строка)
Тип записи в админке. На странице записи или таксономии.
$menu(массив)
Массив данных с элементами меню админки, которые были добавлены через add_menu_page(). Содержит Массив массивов данных каждого меню.
$submenu(массив)
Массив данных с элементами под-меню админки, которые были добавлены через 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(логический)
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 текущего блога
10 комментов
    Войти