Глобальные переменные в 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