Как создать плагин для WordPress

By | 14.09.2012

WordPress плагин – это PHP-скрипт, который вносит изменения в Ваш сайт. Это может быть небольшое нововведение в шапке сайта или же более радикальные преобразования (такие как, работа системы авторизации, автоматическая рассылка электронных писем и многое другое).

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

Тема или плагин?

Если Вы когда-либо настраивали темы вручную, то, вероятно, знаете, что существует файл functions.php, который предоставляет Вам множество возможностей и позволяет создавать разнообразный функционал в теме. Так какой же тогда смысл в плагине, если есть этот замечательный файл functions.php? Когда использовать тему, а когда плагин?

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

Дело в том, что функционал плагина сохраняется независимо от того, какая тема на сайте активна в данный момент. В то время как любые изменения, внесённые в functions.php перестанут работать, когда Вы решите сменить тему.

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

Всё, что нужно для создания плагина – создать папку и один файл внутри неё с содержанием в одну строку. Перейдите к wp-content/plugins и создайте новую папку с именем awesomeplugin. Внутри новой папки создайте файл с именем awesomeplugin.php. Откройте его в текстовом редакторе и скопируйте в него следующий фрагмент кода:

Из всей этой информации обязательно только имя плагина. Но если Вы планируете поделиться своим плагином с интернет-сообществом, то лучше добавить максимальное количество информации.

Теперь осталось только активировать созданный плагин. Это всё! Конечно же, этот плагин бесполезен, но он активен и корректно создан.

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

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

Если функционал Вашего плагина базируется на одном основном классе, то лучшим вариантом будет вынести его в отдельный файл, а дополнительные функции разместить в других файлах. Для CSS иJavaScript-файлов имеет смысл создать отдельные папки.

Нужно стремиться к тому, чтобы найти золотую середину между правильной структурой, удобством в использовании и минимализмом. Разделите код плагина на несколько файлов в том случае, если это действительно необходимо, не нужно относиться к этому с фанатизмом. Думаем, Вам будет полезно взглянуть на структуру таких популярных плагинов как WP-PageNavi и Akismet.

Наименование плагина и его функций

При создании плагина обратите особое внимание на наименование функций, классов и самого плагина. Если Ваш плагин, например, выводит на экран последние новости в блогосфере, то назвать его “blognews”, а его основную функцию “blog_news” может показаться логичным. Проблема в том, что эти имена слишком общие и могут конфликтовать с другими плагинами, у которых имеется похожий функционал.

Распространённым решением этой проблемы является использование уникальных префиксов. Вы можете использовать название “my_blognews” или что-то в этом роде, имеющее низкую вероятность быть продублированным.

Безопасность плагина

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

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

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

Очистка после удаления плагина

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

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

  • register_activation_hook()
    Этот хук позволяет создать функцию, которая запускается сразу же после активации плагина. Он принимает путь к главному файлу плагина в качестве первого аргумента и функцию, которую Вы хотите использовать в качестве второго. Этот хук можно использовать для проверки обновлений для плагина, проверки используемой версии PHP и т.д.
  • register_deactivation_hook()
    Название говорит само за себя. Функция будет запущена сразу же после деактивации плагина. Держите этот хук в рукаве на всякий случай.
  • register_uninstall_hook()
    Этот хук срабатывает, когда плагин полностью удалён из WordPress. Он сообщает нам о самом подходящем моменте для удаления данных, которые использовались плагином.

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

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

Документация и стандарты кода

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

Мы комментируем код для своего же собственного блага, потому что едва помним функции, которые написали вчера, не говоря уже о коде, написанном несколько месяцев назад. А если Вы начнёте работать в команде или Ваш код станет популярным, то документация станет неотъемлемой частью Вашей жизни. Так что лучше начать уже сейчас.

Хоть это и не так важно как документация, но следовать принятым в WordPress’ guidelines стандартам кода было бы неплохо.

Ближе к практике

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

Планирование

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

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

Первые шаги

Сначала нужно создать папку для плагина и подготовить файловую структуру. Создайте новую папку с именем awesomely_popular. В этой папке создайте файл с именем awesomely_popular.php и добавьте в него примерно следующее содержимое:

Запись количества показов статьи

Не вдаваясь слишком глубоко в подробности, хуки позволяют вызывать одну из Ваших функций, когда другая функция WordPress сработает. Таким образом, если бы мы нашли такую функцию, которая срабатывает при просмотре пользователем конкретной статьи, то часть дела была бы сделана. Останется только написать собственную функцию для обновления количества просмотров статьи. Вот код этой функции:

Как Вы, наверное, заметили, мы используем документирующий блок в стиле phpDocumentor перед функцией. Прежде всего, мы проверяем в условном выражении, какой тип страницы пользователь просматривает.

Если пользователь просматривает нужный нам тип страницы, мы воспользуемся объектом $post, который содержит информацию о текущей статье (идентификатор, название, дата публикации, количество комментариев и т.д.). Затем мы получаем количество просмотров, которое уже набрала эта статья, добавляем 1 к этому значению и перезаписываем информацию в базе данных. Для того, чтобы всё прошло максимально гладко, мы используем несколько проверок переменной, хранящей количество просмотров.

Текущее количество просмотров в любом случае должно быть задано и не быть пустым, а также тип переменной обязательно должен быть integer. Если хоть одно из этих условий не выполняется, то мы будем использовать 0 в качестве текущего количества просмотров. После чего мы добавим 1 и обновим его значение в базе данных. В заключении мы возвращаем обновлённое значение.

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

Вот и вся “мистика” хуков. По сути, мы сказали, что хотим, чтобы функция awepop_add_viewвызывалась каждый раз, когда срабатывает хук wp_head. Этот код можно разместить до или после самой функции.

Получение и отображение количества просмотров

В функции выше мы воспользовались get_post_meta() для того, чтобы получить нужное нам значение из базы данных. Написание отдельной функции для этой цели может показаться избыточным, но зато даст нам большую гибкость при дальнейшем расширении плагина. Взгляните:

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

Пока мы только получали информацию. Теперь давайте отобразим её на экране. Вы можете подумать, что это совсем просто, что нужно просто распечатать значение, возвращаемое функцией awepop_get_view_count() на экран. Это, конечно же, сработает, но что если просмотр только 1? Нам нужно будет использовать слово “view” в единственном числе. Также можно окружить это значение сопровождающим текстом. Поэтому давайте создадим отдельную простую функцию:

Отображение списка статей отсортированных по количеству просмотров

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

Мы начинаем с того, что передаём большое количество параметров классу WP_Query, чтобы создать объект, содержащий статьи. Этот класс сделает за нас всю грязную работу: он извлечёт 10самых популярных статей и отсортирует их в порядке убывания.

Если объект со статьями не пуст, мы создадим элемент ненумерованного списка. А затем в цикле пройдёмся по всем статьям, которые извлекли из базы данных, отображая заголовок каждой в качестве ссылки на её полную версию. Когда все статьи будут отображены, мы поставим закрывающий тэг списка. Поместив функцию awepop_popularity_list() в любом месте темы, мы получим список статей упорядоченных по популярности.

В качестве дополнительной меры предосторожности добавьте проверку на существование функции:

Это обезопасит нас от PHP-ошибок, на сайте, если вдруг плагин будет отключён. Список просто не будет отображаться.

Выводы

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

Источник: smashingmagazine.com

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.