Ядро WordPress.Файл «load.php». Часть 7

load_php

В данной публикации я рассмотрю такие функции «load.php» как:

  • is_user_admin (),
  • is_multisite (),
  • get_current_blog_id()
  • get_current_network_id()
  • wp_load_translations_early()

is_user_admin (), is_multisite (), get_current_blog_id() и get_current_network_id()

load-21

Функция “is_user_admin()” – определяет, является ли текущий запрос страницей, которая показывается только администратору. Принцип работы аналогичен предыдущим трём функциям.

Функция “is_multisite()“- проверяет включен ли режим “мультисайт“. Сначала ведётся поиск именной константы “MULTISITE”. Если она была определена, тогда возвращается её значение. В случае отсутствия такой константы функция пытается обнаружить существование одной из ниже перечисленных констант:

  • SUBDOMAIN_INSTALL
  • VHOST
  • SUNRISE

Если существует хотя бы одна из них, тогда функция “is_multisite()” сообщает о том, что режим “мультисайт” включён (возвращается “TRUE”). В остальных случаях режим “мультисайт” считается выключеным, потому функция возвращает “FALSE”.

Функция “get_current_blog_id()” – получает “ID” текущего блога. Он хранится в глобальной переменной “$blog_id”, поэтому достаточно вернуть значение этой переменной. Но перед этим вызывается функция “absint()“, которая преобразует значение глобальной переменной “$blog_id” в неотрицательное число.

load-22

Функция “get_current_network_id()” – возвращает “ID” текущей сети. Если режим “мультисайт” не включён, тогда возвращается “1”. В ином случае, с помощью функции “get_network()“, извлекаем необходимые сетевые данные и сохраняем их в переменной “$current_network”. Затем проверяем наличие переменной “id”. Если она существует, тогда вызываем функция “absint()“, которая преобразует значение переменной “id ” в неотрицательное число, которое возвращается функцией.

Если же переменная “id” не существует, тогда вызывается функция “get_main_network_id()“, которая возвращает идентификатор основной сети.

wp_load_translations_early()

load-23

Функция “wp_load_translations_early()” – осуществляет раннюю загрузку переводов. Она использует глобальную переменную “$wp_locale”. В ней хранится экземпляр объекта “WP_Locale”. В статической переменной “$loaded” хранится флаг ранней загрузки переводов. То тесть если эта функция была запущена ранее, то переменная “$loaded” хранит значение “TRUE”. Если это первый запуск, то “$loaded” хранит значение “FALSE”. Если это всё же первый запуск, то проверяется наличие функции “did_action()“. Если она существует и возвращает значение отличное от нуля для действия “init”, тогда функция “wp_load_translations_early()” прекращает свою работу. В противном случае подключается файлы, необходимые для языкового перевода.

Далее объявляются два массива “$locales” и “$locations”. Запускается цикл “while”. В этом цикле сначала определяется существование именной константы “WPLANG”. В данной константе хранится информация о локализации WordPress. Значение может быть “ru_RU“, “en_EN” или любое другое. Если эта информация отсутствует, то работа цикла заканчивается. Если же константа содержит некоторую информацию, тогда эта информация заносится в массив “$locales”.

Затем проверяется существование переменной “$wp_local_package”. Эта переменная находится в файле “version.php“. Это один из подключаемых файлов. В этой переменной также хранится информация о локализации WordPress. Если эта переменная существует, тогда её содержимое сохраняется в массиве “$locales”. Если массив “$locales” окажется пустым, тогда работа цикла прерывается.

В случае дальнейшей работы цикла “while” выясняем определена ли именная константа “WP_LANG_DIR”. Эта константа содержит абсолютный путь к каталогу с языковыми файлами. Если эта константа определена и путь, который она содержит, указывает на папку ( “is_dir()” ), тогда этот путь сохраняется в массиве “$locations”.

Если интересующая нас константа не определена, тогда выясняем существует ли константа “WP_CONTENT_DIR”. Если она имеется, тогда проверяем путь ” ‘WP_CONTENT_DIR . ‘/languages’ “. Хочу напомнить, что константа “WP_CONTENT_DIR” содержит абсолютный путь к папке “wp-content”. В этой папке мы ищем папку “languages”. Если функция ” “is_dir()“, говорит нам, что указанный путь является директорией, то этот путь сохраняется в массиве “$locations”.

Если и эта константа не определена, тогда при помощи функции “is_dir()” проверяются два пути:

  1. ” ABSPATH . ‘wp-content/languages’ “. В константе “ABSPATH” указан абсолютный путь к корню сайта.
  2. ” ABSPATH . WPINC . ‘/languages’ “. Этот путь указывает на папку “languages”, которая может находиться в папке “wp-includes”.
load-24

Если папка “languages” действительно существует, тогда один из указанных путей или оба сохраняются в массиве “$locations”. Если этот массив, в итоге, окажется пустым, тогда работа цикла “while” прерывается. Если же массив заполнен, тогда убираем из него повторяющиеся значения с помощью функции “array_unique()“.

После этой процедуры запускается два цикла “foreach”. Первым циклом перебирается массив “$locales”, в котором указана информация о локализации WordPress. Вторым циклом перебирается массив “$locations”, содержащий абсолютные пути к папкам с языковыми файлами. В процессе перебора обоих массивов функция проверяет существование файлов с расширением “.mo”. Эти файлы могут располагаться во вложенной директории папки “languages”. Имя файла совпадает с названием локализации WordPress. То есть этот файл может называться “ru_RU.mo” или, “en_EN.mo” или иначе.

load-25

Если этот файл “.mo” найден, тогда его содержимое сохраняется функцией “load_textdomain()” в элементе “default” глобального массива “$l10n”. Сама функция “load_textdomain()” объявляется в файле “l10n.php”, который был подключён ранее.

Теперь осталось найти файлы перевода сообщений, появляющиеся в панели администратора. Если таковые найдены, то их содержимое также сохраняется в элементе “default” глобального массива “$l10n”. Если в этом элементе уже существует текстовое содержимое, то оно объединяется с новым.

Как только переводы были загружены, в дело вступает оператор “break”. Он прерывает выполнение циклов “foreach“. Заметьте, рядом с этим оператором указано число 2. Это означает, что следует прервать выполнение обоих циклов: внешнего и внутреннего. Если не указать число, оператор “break” прервёт выполнение только внутреннего цикла “foreach“. После того как работа этих циклов была прекращена, используется ещё один оператор “break”, который прекращает выполнение цикла “while”.

На завершающем этапе работы функции “wp_load_translations_early()” создаётся экземпляр класса “WP_Locale()”.

You may also like...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Sign up
Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.