
Применение техники ООП при написании плагина, открывает большие возможности для функционала и вносит визуальную гармонию в Ваш код, поэтому игнорировать ООП и продолжать использовать процедурный подход считаю не правильным. В сегодняшней заметке, я расскажу как создать WordPress плагина с применением техники ОПП.
Код ООП базируется на классах и методах, поэтому естественно начинаем с создания базового класса, который будет взаимодействовать с хуками и фильтрами WP
class WPmyPlugin { public function __construct() { } public function myMegaFunc(){ // основной код } } $wpmyPlugin = new WPmyPlugin();
Все фильтры и хуки должны регистрироваться в конструкторе. Для этого применяется функция add_shortcode() – первым параметром идёт тэг, вторым колбэк функция. Если мы говорим о регистрации внутри объекта – в качестве второго параметра, мы должны использовать массив. Первым элементом которого идёт ссылка на объект – $this, а вторым название метода используемого класса. Подробнее о add_shortcode() можно почитать в документации – http://codex.wordpress.org/Function_Reference/add_shortcode
Полный код к данному моменту:
class WPmyPlugin { public function __construct() { add_shortcode('PluginTag', array($this, 'shortcode')); } public function shortcode() { } public function myMegaFunc(){ // основной код } } $wpmyPlugin = new WPmyPlugin();
Этот же код без ООП, с применением процедурного подхода
add_shortcode('shortcode_name', function() { // основной код });
Конечно, если Ваш плагин выводит hello world!, применение ООП избыточно, да и не обосновано. Но если Вы разрабатываете, что то по сложнее, то Методы вносят структурированность информации.
Объявленный метод shortcode() служит буфером между основным кодом и тем что возвращается пользователю, именно в нём следует назначить все дефолтные атрибуты и вызвать наш основной метод myMegaFunc()
public function shortcode($atts) { extract(shortcode_atts(array( 'images' => 3, 'width' => 50, 'height' => 50, 'caption' => true, ), $atts)); return $this->myMegaFunc($atts['user'], $images, $width, $height, $caption); }
Жестоко заставлять пользователя при использовании нашего шорткода перечислять все параметры, необходимые для нашего метода. Использование extract(shortcode_atts(), $atts)); даёт возможность дополнить или переназначить наши дефолтные параметры, по желанию пользователя. Например, пользователь хочет видеть 5 изображений, а не 3, как в дефолте:
['PluginTag user=haris images=5]
Базово виджеты WP не поддерживают шорткоды, поэтому поменяем это вручную через фильтр widget_text (подробнее о фильтрах – в codex.wordpress.org )
public function __construct() { add_shortcode('PluginTag', array($this, 'shortcode')); add_filter('widget_text', 'do_shortcode'); }
На данном этапе, чтоб использовать наш метод в шаблоне, нм потребуется создать объект, и только потом вызывать его метод. Думаю разработчикам и верстальщикам шаблонов для WP это бы очень не понравилось. Поэтому упрощаем жизнь используя функцию, вынесенную за пределы класса.
function wp_myPlugin($user, $images = 3, $width = 50, $height = 50, $caption = true)
{
$wpmyPlugin = new WPmyPlugin;
echo $wpmyPlugin->myMegaFunc($user, $images, $width, $height, $caption);
}
Заготовка для написания WordPress плагина с применением ОПП.