0

Создание wordpress плагина с помощью техники ООП

Опубликовано: 20.09.2011 | Рубрика: Гостевые посты, Плагины WordPress

wordpress плагин с помощью ООПВсем привет! Продолжаю публиковать гостевые посты, которые приходят мне на почту. Сегодня нам Тарас Мороз расскажет о том, как сделать вордпресс плагин с помощью ООП.

Объектно ориентированное программирование (ООП), среди  остальных техник программирования, помогает организовать программный код и добавить продуктивности к вашему коду. В этой статье, мы научимся основам написания wordpress плагинов, используя ООП технику. Также мы будем использовать Dribbles API, как пример. Готовы?

Что мы сегодня узнаем:

Преимущества использования ООП при создании wordpress плагинов.

Как установить краткий код (shortcode).

Как настроить template tag.

Как реализовать работоспособность краткого кода (shortcode) в WordPress виджетах.

Реальный пример с использованием Dribbbles API.

Почему именно ООП?

Создание Вордпресс плагина с помощью техник ООП, наиболее рациональный подход. Это улучшает процедуру компилирования программного кода на сервере. Также делает более удобным управление базой кода, точнее его вторичное использование. Это очень практично при написании большого или многофункционального плагина. Если говорить о практичности создания приложений, стоит также упомянуть о стратегии mvc в php , которая помогает разделить работу веб-разработчиков и дизайнеров, а также организовать правильную структуризацию кода. Но это отдельная тема, кстати, движок wordpress, написан с использованием стратегии mvc.

Dribbble

Для написания Вордпресс плагина, у нас должна быть определенная цель, его назначение. Мы будем писать плагин, который будет показывать последний скриншот из Dribbble.com, используя их REST API. Далее мы добавим shortcode для возможности монтирования плагина в шаблон и создадим template tag, который требует Вордпресс при создании плагинов. Если вы не понимаете, что такое shortcode или template tag, не огорчайтесь, в ходе статьи вы все поймете, просто следуйте четко шаг за шагом.

Шаг 1 – Создание класса плагина

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


class WPDribbble {

public function __construct()

{

}

}

$wpDribbble = new WPDribbble();

PHP классы имеют функцию конструктора __construct(). Которая инициализирует новый класс как объект. Другими словами, создает объект класса, конструирует.  В конструкторе,  нам нужно регистрировать shortcode нашего плагина. Функция add_shortcode, это стандартная функция (хук) вордпресса, которая должна быть вызвана в нашем конструкторе, для регистрации плагина. Другими словами, на этом этапе мы связываем работу плагина с ядром Вордпресса. Новый вариант нашего кода будет выглядеть подобным образом:

class WPDribbble {

public function __construct()

{

add_shortcode('Dribbble', array($this, 'shortcode'));

}

public function shortcode()

{

}

}

$wpDribbble = new WPDribbble();

add_shortcode – принимает два параметра: имя shortcode, и функция, которая будет вызываться.

Стоит заметить, что мы указываем второй параметр, как массив, который мести т в себе вызываемую функцию внутри объекта (класса). Его содержимое: $this – указывает на сам объект, второй элемент – это имя функции (метода), которая содержится внутри класса. Каждая функция внутри класса, должна связываться с вордпрессом, подобным образом.

Все еще не поняли о чем я?

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

# 1. Стандартное использование

add_shortcode('shortcode_name', 'shortcode_func');

function shortcode_func()

{

// Содержимое этой функции будет выполнятся, когда блоггер будет

// вызывать имя [shortcode_name] shortcode.

} 

# 2. В PHP 5.3, мы можем указать безымянную функцию.

add_shortcode('shortcode_name', function() {

// Содержимое этой функции будет выполнятся, когда блоггер будет

// вызывать имя [shortcode_name] shortcode.

}); 

#3. В случае создания класса

class WPDribbble {

public function __construct()

{

add_shortcode('Dribbble', array($this, 'shortcode'));

}

public function shortcode()

{

// Содержимое этой функции будет выполнятся, когда блоггер будет

// вызывать имя [shortcode_name] shortcode.

}

} 

Шаг 2 – Создание Dribbble API класса

Мы напишем DribbbleAPI объект и зарегистрируем метод getPlayerShots(), который будет взаимодействовать с Dribbble API и будет возвращать массив последних скриншотов.

Давайте создадим для этого класса новый файл и назовем его DribbbleAPI.php

class DribbbleAPI {

// Адрес Dribbble api

protected $apiUrl = 'http://api.dribbble.com/';

// Dribbble имя пользователя или id

protected $user;

public function __construct($user)

{

$this->user = $user;

}

public function getPlayerShots($perPage = 15)

{

$user = $this->user;

$json = wp_remote_get($this->apiUrl . 'players/' . $user . '/shots?per_page=' . $perPage);

$array = json_decode($json['body']);

$shots = $array->shots;

return $shots;

}

}

В конструктор передается переменная $user, это для возможности передавать ее внутрь класса при его создании (вызове в синтаксисе).

getPlayerShots – принимает имя пользователя и посылает запрос в Dribbble API с помощью функции wp_remote_get. API возвращает ответ в виде JSON, который парсится в массив, и возвращается с помощью return.

Шаг 3 – Интеграция DribbbleAPI класса

На этом этапе мы будем использовать наш только созданный класс. Мы будем принимать скриншоты из API и генерировать html список, который будет передан с помощью shortcode в шаблон. В процессе получения ответа из API мы будет кешировать и сохранять превью картинок используя TimThumb.

Для определения места хранения картинок, мы будем использовать две переменные: pluginPath и pluginURL.

class WPDribbble {

protected $pluginPath;

protected $pluginUrl;

public function __construct()

{

// Установка Plugin Path

$this->pluginPath = dirname(__FILE__);

// Установка Plugin URL

$this->pluginUrl = WP_PLUGIN_URL . '/wp-Dribbble';

add_shortcode('Dribbble', array($this, 'shortcode'));

}

Метод getImages()

Создайте новый метод внутри класса WPDribbble, и назовите getimages.

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

public function getImages($user, $images = 3, $width = 50, $height = 50, $caption = true)

{

include 'DribbbleAPI.php';

$DribbbleAPI = new DribbbleAPI($user);

$shots = $DribbbleAPI->getPlayerShots($images);

if($shots) {

$html[] = '<ul class="wp-Dribbble">';

foreach($shots as $shot) {

$image = $shot->image_url; // url картинки

$fileName = $shot->id . '.png'; // генерация имени превью картинки image_id.png

if (!file_exists($this->pluginPath . '/full-images/' . $fileName)) { // Проверяем существует ли полноразмерная картинка

$rawImage = wp_remote_get($image); // получаем изображение

$newImagePath = $this->pluginPath  . '/full-images/' . $fileName;

$fp = fopen($newImagePath, 'x');

fwrite($fp, $rawImage['body']); // сохраняем изображение

fclose($fp);

}

// генерируем url превью картинок

$localImage = $this->pluginUrl . '/timthumb.php?src=' . strstr($this->pluginPath, 'wp-content') . '/full-images/' . $fileName . '&w=' . $width . '&h=' . $height . '&q=100';

if($caption) {

$captionHTML = '<p class="wp-Dribbble-caption">' . $shot->title . '</p>';

}

// соединяем вместе: url, title и превью картинки для ul листа

$html[] = '<li class="wp-Dribbble-list"><a href="' . $shot->url . '" title="' . $shot->title . '"><img src="' . $localImage . '" alt="' . $shot->title . '" /></a>'.$captionHTML.'</li>';

}

$html[] = '</ul>';

return implode("\n", $html);  // возвращаем список в виде HTML кода

}

}

Шаг 4 – Установка Shortcode

Shortcode – это имена определенных функций, которые помогают блогерам, вмонтировать код, более легко и просто, в контекст странички.

Мы уже добавили add_shortcode в наш класс плагина. Теперь мы напишем наш метод shortcode, внутри класса, который будет вмещать в себе атрибуты, и возвращать превью картинок Dribbble используя getimages() метод. Мы будем вызывать наш shortcode с помощью [Dribbble]. Имя мы уже предопределили вначале 1го шага. Он будет использоваться с набором атрибутов, необходимых для функции getImages(). Например: [Dribbble user=sitear images=5 width=100 height=100 caption=true].

public function shortcode($atts)

{

// импортирует атрибуты в переменные

extract(shortcode_atts(array(

'images' => 3,

'width' => 50,

'height' => 50,

'caption' => true,

), $atts));

return $this->getImages($atts['user'], $images, $width, $height, $caption);

}

Добавляем поддержку shortcode для WordPress Widgets

По умолчанию, WordPress widgets не поддерживают shortcodes, но с помощью widget_text фильтра, мы сможем реализовать поддержку shortcode в WordPress widgets.

Мы добавим фильтр в конструктор объекта класса WPDribbble.

public function __construct()

{

$this->pluginPath = dirname(__FILE__);

$this->pluginUrl = WP_PLUGIN_URL . '/wp-Dribbble';

add_shortcode('Dribbble', array($this, 'shortcode'));

// Add shortcode support for widgets

add_filter('widget_text', 'do_shortcode');

}

Шаг 5 – Создание Template Tag

Template tag – может использоваться исключительно только в темах Вордпресс. Основное назначение template tag, это создание новой инстанции для нашего WPDribbble класса, и вызов функции getImages(). На деле, это простая PHP функция, которая должна быть записана вне класса плагина. Она должна иметь уникальное имя, чтобы не конфликтовать с другими функциями вордпресса. Поэтому мы ее назовем wp_Dribbble.

function wp_Dribbble($user, $images = 3, $width = 50, $height = 50, $caption = true)

{

$wpDribbble = new WPDribbble;

echo $wpDribbble->getImages($user, $images, $width, $height, $caption);

}

Ура

Поздравляю! Вы только что создали wordpress плагин, с использованием ООП. Даже если вам не нужен плагин для сервиса Dribbble, надеюсь вы освоили технику создания плагинов на ООП. Если имеете, некоторые трудности или недопонимания, обращайтесь через комментарии.

Вот ссылка на созданный плагин. Он используется следующим образом:

вы вставляете в пост, или в html код темы следующий shortcode: [dribble user=softfacade]

user — это ваш аккаунт на dribbble

В итоге должно получится вот это:

Если у вас есть интересная идея для гостевого поста, пишите мне на мыло sidashik[@]gmail.com. Sidash

Постовой: компьютерный интернет магазин с самыми современными компьютерами по доступным ценам.

...
Предыдущая
«
Следующая
»