Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress Plugins

Использование пространств имен и автозагрузок в плагинах для WordPress, часть 1

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Using Namespaces and Autoloading in WordPress Plugins.
Using Namespaces and Autoloading in WordPress Plugins, Part 2

Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)

Пространства имен и автозагрузки не самая обсуждаемая тема, когда речь заходит о работе с плагинами WordPress.

В чём-то это связано с общественным мнением, в чём-то с версиями PHP, которые поддерживает WordPress, а в чём-то просто потому, что не так много людей вообще говорят об этом.

В некотором смысле это нормально.

Ни пространства имён, ни автозагрузчики не являются насущной необходимостью при создании плагинов. Однако они помогают лучше организовать и структурировать код и сократить количество requirerequire_onceinclude, или include_once определений в плагине.

В этой серии уроков обратимся к пространству имён PHP, их преимуществам и приёмам использования. Затем научимся использовать автозагрузчики для автоматической загрузки целых файлов без ручного набора кода.

Перед тем, как начать урок

Для начала вам понадобятся следующие инструменты:

  • Локальный сервер с поддержкой PHP 5.6.20, веб-сервер Apache и сервер базы данных MySQL.
  • Каталог, из которого размещается WordPress 4.6.
  • Текстовый редактор или привычный вам IDE для написания плагина.
  • Навык работы с WordPress Plugin API.

Когда всё это у вас есть, можно приступать к строительству плагина. Если что-то из вышеперечисленного окажется для вас новостью, не стесняйтесь обратиться к моим предыдущим урокам на my profile page.

Кроме того, заходите on my blog и/или Twitter по @tommcfarlin где я веду разговор о программных разработках применительно к WordPress.

Итак, можно начинать.

Что мы будем строить

В этих уроках мы напишем простой плагин в целях демонстрации работы пространств имён и автозагрузок в PHP. Применим теорию на практике.

С этой целью мы будем строить плагин для упрощения загрузки таблицы стилей и стилей JavaScript, отображения в meta box и помощи пользователю в решении вопросов по блогу.

Конечно, он не пригодится для размещения в хранилище плагинов  WordPress и не сможет быть использован в дальнейшей практике. Помните, цель нашего обучения в показе возможностей пространства имён и автозагрузок.

Сделаем это на примере.

Строительство плагина

Если вы уже бывали на моих занятиях, то знаете, что я всегда составляю план действий перед тем, как устремиться к написанию кода. Прежде всего, нам понадобится:

  1. Определить bootstrap файл для запуска плагина.
  2. Настроить каталог для всех файлов, которые мы хотим видеть в метабоксе.
  3. Создать каталог для размещения классов наших зависимостей.
  4. Подготовить таблицу стилей и JavaScript для нашего плагина.

Всё просто, верно? Если нет, не переживайте. Я пройду с вами весь процесс с показом кода, комментариями, картинками и пояснениями.

Итак, приступим.

Создание директории плагина

Мы определились, что нам нужен файл для загрузки плагина. Мы также знаем, что нужен каталог для управления из панели администратора.

Давайте его создадим:

The plugins initial directory structure

У нас появился один пустой файл и каталог администратора. Идём дальше и настраиваем плагин так, чтобы он был виден в контексте WordPress Plugin.

Чтобы сделать это, нам нужно добавить следующий блок кода в верхнюю часть файла плагина:

Затем, если обратитесь к WordPress Plugin Page в панели администратора, он окажется в списке. Если вы захотите его активировать, ничего не произойдет, поскольку мы еще не написали никакого кода.

The Tuts Namespace Demo plugin in the WordPress administration area

Сейчас надо определить класс, видимый в нашем meta box на странице Add New Post.

Добавление Meta Box

Предполагается, что вы разбираетесь в создании метабокса. Если нет, не поленитесь изучить основы в этом блоке in this series и возвращайтесь.

Во-первых, создайте файл class-meta-box-display.php в папке admin нашего плагина. Это будет содержимое кода. Убедитесь, что в комментариях поясняется всё, за что этот класс отвечает.

Код указывает вам, что этот класс будет отвечать за отображение содержимого внутри метабокса. Однако, пока что это просто видимость такого заявления.

В дальнейшем мы это исправим.

Теперь нам необходимо ввести класс, представляющий сам метабокс. Создадим class-meta-box.php файл в папке admin нашего плагина. Код отвечает только за это. Вернитесь к коду снова и я покажу, что получилось:

Этот класс поддерживает один атрибут, который является ссылкой на его отображение. То есть, класс отвечает за определение метабокса (где, в свою очередь, выводится отображение сообщения).

Отображение поддерживается как частность, заданная в конструкции. Метабокс не будет определяться до вызова метода init (с модулем загрузки плагинов мы познакомимся в этом курсе).

С этого момента у нас имеется всё, что нужно для появления основы метабокса на Add New Post Page. Но, во-первых, нам нужно настроить bootstrap плагинов.

В предыдущих курсах я это делал много раз, поэтому вставляю только необходимый код (как и определено в заголовке). Я добавил комментарии и показываю, что происходит после выполнения кода.

Это особенно важно, потому что автозагрузчик будет возражать против показа некоторых необходимых вещей.

Во-первых, мы убедились, что файл недоступен напрямую и может быть запущен только через WordPress.

Во-вторых, мы include_once классы, созданные до сих пор. Далее мы создали Meta_Box и передали его экземпляр Meta_Box_Display в конструктор.

В итоге мы вызвали init и назначили ему место в классе Meta_Box.

Предполагая, что всё сделано верно, можем активировать плагин и увидеть метабокс на  Add New Post (или, конечно, на странице Update Post).

Our Meta Box appearing on the New Post Edit Post page

На данный момент у нас есть действующий плагин, но пока что он способен только открыть окно метабокса и показать строку текста.

Давайте, наконец, научим его показывать некие наводящие вопросы и отображать их при каждой загрузке страницы.

Отображение наводящих вопросов

Для начала найдём файл с текстом наводящего вопроса. К счастью, интернет изобилует такими примерами (и они freely available). Поэтому создаём подпапку data в admin, куда поместим файл questions.txt

The questionstxt file in the data subdirectory

Далее нам нужно создать класс, который будет:

  1. Открывать файл
  2. Читать случайные строки.
  3. Закрывать файл.
  4. Возвращать строку.

Начнём создание класса. Поскольку эта утилита будет использоваться внутри плагина для управления, создадим подпапку util в admin. Далее создадим файл class-question-reader.php.

Сейчас мы указали код для данного класса, но вернёмся к файлу загрузки плагина, чтобы не забыть его включить. Окончательно код будет выглядеть так:

Как видите, количество файлов, вводимых вручную, становится всё больше. Представьте, если бы мы работали с большим плагином! Позже мы вернёмся к этому вопросу.

Сейчас давайте снова обратим внимание к ридеру вопроса. Код класса должен выглядеть так:

Обратите внимание, что код выглядит относительно простым, но если вы не знакомы с некоторыми базовыми операциями в PHP, вот как мы поступим:

  1. Откроем файл с помощью fopen, который даёт возможность для чтения файла.
  2. Прочитаем содержимое и, взяв каждую строку файла, пропишем её в индексе массива.
  3. После этого мы выбираем случайное количество из массива вопросов и возвращаем в метод, которым он был вызван. Если вернётся пустая строка, ищем до тех пор, пока вопрос не найдётся.
  4. Затем закрываем ресурс в файл.

В конечном счете, для использования этого класса вам просто нужно создать его экземпляр, зная путь к файлу с вопросами и затем вызвать метод get_question_from_file.

Примечание: Этот класс не делает какой-либо обработки ошибок. Это обычная практика работы с файлами. Например что мы должны делать, если файл не находится? Что делать, если он отформатирован неправильно или если не удаётся закрыть ресурс?

Это хорошие вопросы, но они выпадают из темы урока. Всю эту информацию можно найти в руководстве по PHP (и, возможно, в некоторых других учебниках сети Envato Tuts +).

Пока что мы озаботимся чтением найденного файла и его отображением в окне метабокс.

Что мы имеем сейчас

Теперь мы можем собрать всё вместе. Полагая, что всё сделано правильно, передаём экземпляр Question_Reader в Meta_Box_Display, задаём вопрос и отображаем его в метабокс.

Во-первых, обновим файл загрузки:

В приведённом выше коде обратите внимание, что Meta_Box_Display теперь назначен для конструкции ридера вопросов. Это означает, что надо ввести новое свойство, что мы и сделаем:

Обратите внимание, что этот файл использует путь к файлу вопросов, добавленному в подпапку данных. Помимо жёсткой кодировки пути, этот класс также зависит от Question_Reader.

Для показательного примера нашей темы (а именно, пространств имен и автозагрузки) это нормально. В будущем постараемся найти проекты, менее связанные между собой. Возможно это станет темой будущего курса обучения.

Первостепенным в приведённом выше коде является то, то класс Meta_Box_Display отображает вопрос для пользователя.

Обратите внимание на применение wp_kses для очистки данных прежде того, как они будут отображены.

После обновления страницы Add New Post вы увидите такую картинку:

Random questions appearing in a meta box

А после следующего обновления увидите загруженными новые вопросы.

Куда мы двинемся дальше?

Очевидно, мы еще только прикоснулись к темам пространств имён и автозагрузок, но это нормально! Важно, что мы заложили фундамент для плагина, пока что без возможности его использования. Когда мы ещё усовершенствуем его, то увидим все преимущества, которые обнаружатся.

Поэтому нам предстоит дополнительная работа: введём  JavaScript, CSS и загрузчик активов. Тогда мы увидим полную картину, насколько выгодным является упаковка файлов в пространства имён.

Не забывайте, что все мои предыдущие уроки находятся на my profile page, заходите на my blog или в Twitter.

Как всегда, если ищете утилиты в дополнение к вашему набору инструментов развития для WordPress или примеры кода для обучения с целью стать более сведущим в WordPress, не забывайте заглянуть, что приготовлено на we have available in Envato Market.

На этом будем считать работу над основой плагина завершённой и в следующем уроке будем готовить его к загрузке. Если хотите использовать код из урока, не стесняйтесь пробовать. Как всегда, задавайте любые вопросы в комментариях.

Ресурсы

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.