первый плагин на wordpress, общее впечатление, некоторые нюансы

ceec22222e3eefdc91f5cb1b49a9bce3

Итак это субъективная статейка по горячим следам о том как написать свой первый плагин для движка какого-то сайта. И в данном случае поговорим о ВордПресс.

Эта статья для начинающих. В нашем случае мы считаем себя дилетантами в вэб разработке.

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

Что послужило причиной

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

У нас есть например некий АПИ для управления неким оборудованием через ajax запросы.

То есть наша идея — дать возможность пользователю какой-то облачной программы, который работает в этой программе из браузера, управлять оборудованием, локально подключённом к его компьютеру.

Вроде бы чего-то сложного?

Действительно все банально — напиши сервер (или сервис) например под Windows, который будет слушать какой-то порт на localhost, принимать команды по http протоколу, выполнять их и результат отдавать обратно клиенту. Ну ещё надо только обойти защиту CORS браузера, но это не сложно.

В чем выгода?

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

Тогда остаётся вывод, что надо как-то НЕ устанавливать программу на компьютер пользователя, а что делать?… Правильно выводить программу в облако, а именно на свой сервер.

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

Посмотрите вокруг

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

И это правда, например в ВордПресс лично я такого ещё не встречал. Например только в webasyst я встретил плагин, эксплуатирующий kkmserver.

Перспектива

А теперь давайте предположим, что ваш драйвер обслуживает НЕ одну конкретную модель оборудования одного производителя, а все модели и разных производителей (конечно же для однотипного оборудования) по единообразному протоколу. И тогда вы предоставляете очевидно выгоду пользователям вашей облачной программы ибо все, что поддерживает ваш плагин поддерживает получается и ваша облачная программа. Список оборудования в дальнейшем легко расширяется разработчиками плагина и т.д. и т.п.

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

Единый протокол

Производители оборудования (конкуренты) и производители готового софта тоже конкуренты и никогда они не смогут договорится между собой об едином протоколе управления оборудованием. Но вот такие как мы программисты в своей нише могут сделать единый протокол и уже на стороне ОС пользователя конвертировать в нативные протоколы каждого производителя. То есть существует ещё одна программа, которая устанавливается на компьютер пользователя (сервер, сервис называйте как хотите).

Когда и кому нужен будет наш плагин?

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

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

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

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

Как лучше начать разрабатывать свой плагин

Чтобы написать свой плагин наверное лучше поискать аналогичный по функционалу.

Для ВордПресса это (в нашем случае) оказался Woocommerce Manual Payment.

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

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

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

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

В общем наш совет это конечно изучать код на примере каких-то чужих плагинов и изучать код самого вордпресс. Это работает на 100%.

Xammp

Да и конечно установите ВордПресс локально на свой компьютер например с помощью xammp или чего-то похожего. Тогда вы сможете отлаживать php код, например в среде VS Code.

Используйте глобальный поиск

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

Все решает инструмент

Глобально ищем по всем файлам ВордПресса использование какой-то сущности, потом ставим отладчиком точку останова в найденном участке кода и ждём сработает она или нет.

Если сработала можем пройтись дальше по коду или вернуться назад, посмотрев стек вызываемых функций. Да и отладчик например XDebug показывает содержание переменных будь то они объекты, массивы и т.д. очень это удобно.

К чему надо быть готовым в вордпресс

Как подключаются ваши js файлы скриптов. Для этого есть полезный метод на php.

Как подключаются ваши стили, css файлы. Для этого того есть метод на php.

Как использовать формы диалогов от jquery

В нашем случае оказалось, что просто надо в ВордПресс включить данный скрипт, то есть он уже есть в движке.

wp_enqueue_script('jquery-ui-dialog');

Примечание: проверить какие js или css файлы подключены уже на странице можно просто — посмотрев исходный код результата страницы. Ищем те же строчки где есть хххххх.js. Суть в том, что все равно все внешние ресурсы подключаются в результате стандартно единообразно и это видно в исходнике результата страницы (Ctrl-U).

admin-ajax.php

Почему ваша страница постоянно периодически перезагружается.

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

По факту это обычный ajax запрос, в передаваемых параметрах которого ВордПресс зарезервировал определенное поведение (определенный функционал, интерфейс).

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

Но также и вы можете посылать на сервер через admin-ajax.php и свои запросы с целью например чтобы на сервере сохранить заказ с новым статусом.

Итоги

В общем на разработку первого плагина на вордпресс уходит примерно одна рабочая неделя, что является на наш взгляд очень не плохим результатом, особенно если учесть, что плагинов для движков сайтов мы ещё не писали. Но самое главное это остаётся чувство грамотности и удобства кода движка вордпресс. В общем респект ВордПрессу. Далее посмотрим joomla или webasyst.

Если кому интересно плагин выложен на гитхабе https://github.com/PavelDorofeev/API-receipt-fiscalization-for-CMS-and-CRM .

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

© Habrahabr.ru