WordPress как на ладони
wordpress jino

Глобальные переменные в WordPress

Мы часто используем функции, чтобы получить какие-то данные на странице и не подозреваем о том, что эти данные можно взять из глобальных переменных. Например, имя автора на странице автора. А иногда мы просто не знаем как получить нужные данные, где они находятся. Эта статья расскажет о том как получить все важные данные текущей страницы из переменных PHP которые уже установлены. Такие данные остается только взять...

Замечу, что если есть равнозначный вариант получить данные через функцию, то лучше получает через функцию. Потому что это может избавить от багов в будущем - при обновлении в следующих версиях, название глобальной переменной может измениться. А то что измениться название функции - это мало вероятно. К тому же, измененные функции не удаляются, а уходят в раздел запрещенные, но по-прежнему продолжают работать... Вот такой пример:

// текущего пользователя можно получить через глобальную переменную
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, которые чаще всего можно использовать в коде. Разумеется это не полный список - глобальных переменных в WordPress о-очень много.

Внутри цикла 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_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_locale(WP_Locale)
Данные текущей локали сайта (язык сайта). Глобальный экземпляр класса WP_Locale.
$locale(строка)
Локаль сайта, например ru_RU.
$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_taxonomies(массив)
Данные всех таксономий.
$wp_post_types(массив)
Данные всех типов записей. Массив объектов WP_Post_Type
$l10n(массив)
Массив всех переводов. Содержит объекты MO класса полученные из файлов .mo
$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_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 - Объект текущей записи.
  • $post->ID - 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. См. get_current_screen()

Переменная также устанавливается и во фронте, только там она всегда содержит index.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 текущего блога
Глобальные переменные в WordPress 15 комментариев
Полезные 4 Все
  • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

    Полезная коллекция. Спасибо.
    Мои 5 копеек:

    $id - (число) id поста. Например 17888
    
    $month
    Array
    (
    	[01] => Январь
    	[02] => Февраль
    	[03] => Март
    	[04] => Апрель
    	[05] => Май
    	[06] => Июнь
    	[07] => Июль
    	[08] => Август
    	[09] => Сентябрь
    	[10] => Октябрь
    	[11] => Ноябрь
    	[12] => Декабрь
    )
    
    $month_abbrev 
    Array
    (
    	[Январь] => Янв
    	[Февраль] => Фев
    	[Март] => Мар
    	[Апрель] => Апр
    	[Май] => Май
    	[Июнь] => Июн
    	[Июль] => Июл
    	[Август] => Авг
    	[Сентябрь] => Сен
    	[Октябрь] => Окт
    	[Ноябрь] => Ноя
    	[Декабрь] => Дек
    )
    
    $preview (true) - если предпросмотр
    
    $request - вернет запрос: SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.ID = 1955 AND wp_posts.post_type = 'post'  ORDER BY wp_posts.post_date DESC
    
    $single (1) - если это одиночная страница (single.php)
    
    $weekday 
    Array
    (
    	[0] => Воскресенье
    	[1] => Понедельник
    	[2] => Вторник
    	[3] => Среда
    	[4] => Четверг
    	[5] => Пятница
    	[6] => Суббота
    )
    
    $weekday_abbrev
    Array
    (
    	[Воскресенье] => Вс
    	[Понедельник] => Пн
    	[Вторник] => Вт
    	[Среда] => Ср
    	[Четверг] => Чт
    	[Пятница] => Пт
    	[Суббота] => Сб
    )
    
    $wp_smiliessearch      string(441) "/(?<=[\r\n\t ]|\xC2\xA0| |^);(?:\-\)|\))(?=[\r\n\t ]|\xC2\xA0| |$)|(?<=[\r\n\t ]|\xC2\xA0| |^)\:(?:\||x|wink\:|twisted\:|smile\:|shock\:|sad\:|roll\:|razz\:|oops\:|o|neutral\:|mrgreen\:|mad\:|lol\:|idea\:|grin\:|evil\:|eek\:|cry\:|cool\:|arrow\:|P|D|\?\?\?\:|\?\:|\?|\-\||\-x|\-o|\-P|\-D|\-\?|\-\)|\-\(|\)|\(|\!\:)(?=[\r\n\t ]|\xC2\xA0| |$)|(?<=[\r\n\t ]|\xC2\xA0| |^)8(?:O|\-O|\-\))(?=[\r\n\t ]|\xC2\xA0| |$)/m" 
    
    3
    Ответитьгод назад #
    • Kama4696

      Спасибо! Некоторые переменные будут полезны... thank_you

      $id я бы не рекомендовал использовать...

      Ответитьгод назад #
      • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

        Почему $id не рекомендовал бы?
        Сейчас возникла такая ситуация - надо было добавить через фильтр данные.
        $post мне вернул на все 10-ть итераций одно и тоже.
        Вписал $id и о чудо - все нужные мне айдишники записи и в нужном месте (на 10 итераций foreach - которые в коде плагина где нужный мне фильтр прописан)

        В чем может быть подвох использования глобальной переменной $id?

        • Kama4696

          Переменная очень популярная... После её определения ты в коде где-нить, в глоб. области напишешь:

          // какой-то код
          $id = 54;
          // еще код

          И все... Код который ниже опирается на эту $id перестанет работать... Ищи потом где и что не так...

          1
          • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

            а ну если так - то и $menu и $author и многие другие переменные можно сюда приписать. Те которые без префикса wp. Я думал что-то особенное.
            Да - именно за это и не любят тру программеры глобальные переменные. Именно поэтому они и гнут палку ООП

            p.s. опять не было уведомления на почту о ответе на комментарий - случайно зашел.

  • campusboy1950 cайт: www.youtube.com/c/wpplus

    Когда-то искал подобную инфу и шиш что нашлось вразумительного. А тут идеально, спасибо!

    2
    Ответитьгод назад #
  • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

    Может в подборке где есть отсылка на эту переменную. Но я искал ее по названию - не нашел.
    Глобальная $comment

    WP_Comment Object
    (
    	[comment_ID] => 80
    	[comment_post_ID] => 1774
    	[comment_author] => отображаемое имя
    	[comment_author_email] => почта
    	[comment_author_url] => сайт
    	[comment_author_IP] => ip адрес
    	[comment_date] => 2016-12-27 12:48:50
    	[comment_date_gmt] => 2016-12-27 09:48:50
    	[comment_content] => комментарий
    	[comment_karma] => 0
    	[comment_approved] => 1
    	[comment_agent] => iPhone
    	[comment_type] => 
    	[comment_parent] => 0
    	[user_id] => 1
    	[children:protected] => Array
    		(
    		)
    
    	[populated_children:protected] => 1
    	[post_fields:protected] => Array
    		(
    			[0] => post_author
    			[1] => post_date
    			[2] => post_date_gmt
    			[3] => post_content
    			[4] => post_title
    			[5] => post_excerpt
    			[6] => post_status
    			[7] => comment_status
    			[8] => ping_status
    			[9] => post_name
    			[10] => to_ping
    			[11] => pinged
    			[12] => post_modified
    			[13] => post_modified_gmt
    			[14] => post_content_filtered
    			[15] => post_parent
    			[16] => guid
    			[17] => menu_order
    			[18] => post_type
    			[19] => post_mime_type
    			[20] => comment_count
    		)
    
    )
    1
  • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

    Еще пара глобальных со страницы https://wp-kama.ru/function/wp_set_current_user
    $user_level
    $userdata

    1
    Ответить3 месяца назад #
    • Kama4696

      Это временные переменные, как $post для записей, только для юзера... Даже не не помню чтобы ими когда-либо пользовался...

      Ответить2 месяца назад #
  • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

    $_wp_additional_image_sizes из get_intermediate_image_sizes() массив зарегистрированных размеров изображений

    1
    Ответить3 месяца назад #
    • Kama4696

      Чтобы получить эту переменную, есть функция обертка wp_get_additional_image_sizes(), её и нужно использовать...

      Ответить2 месяца назад #
      • Otshelnik-Fm185 cайт: otshelnik-fm.ru @

        мое дело предложить... Вижу что она есть. Вижу что здесь ее нет.
        Здесь много переменных у которых есть аналоги получения функциями.

        Ответить2 месяца назад #

Здравствуйте, !

Ваш комментарий