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

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

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

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

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

У нас есть например некий АПИ для управления неким оборудованием через 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.

Если кому интересно плагин выложен на гитхабе

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

Комментарии (12)


  1. menelion_elensule
    25.08.2024 14:35

    WordPress? Правильное разделение кода? Сорри, может, сейчас что-то поменялось, но когда я его смотрел в последний раз (давно! Очень давно!), это был жуткий спагетти-код.


    1. mgis
      25.08.2024 14:35

      Я далеко не фанат Wordpress, но я очень рад что перенес свой проект (e-commerce сайт) с django на WP.

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

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


      1. kkmspb Автор
        25.08.2024 14:35

        Ни разу не пришлось лезть глубоко в исходники

        Я имел ввиду например посмотреть как читать содержание заказа в вордпресс. Это в классах WC_Order_Item_Product, WC_Product_Attribute.


    1. kkmspb Автор
      25.08.2024 14:35

      жуткий спагетти-код

      У меня после с++ php ВордПресса легко заходит


    1. little-brother
      25.08.2024 14:35

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

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

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


      1. alexnozer
        25.08.2024 14:35
        +2

        WP использует рендер на сервере, что на текущий момент является моветоном

        А по-моему наоборот все потихоньку возвращаются на сервер. Уже пару лет есть мода на SSR и всякие там Next/Nuxt/etc, потому что SEO, производительность, кэш, Server Components и т.д. Тот же нашумевший HTMX предлагает рендерить фрагменты HTML на сервере классическим бекендом с шаблонизаторами.

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


  1. weart
    25.08.2024 14:35
    +2

    Выкладывать плагин архивом на гит - это сильно


    1. kkmspb Автор
      25.08.2024 14:35

      А чего такого, как разница куда, на Гите по-моему самое место


  1. GeorgeDydyrko
    25.08.2024 14:35

    После знакомства с WP предпочёл свой вариант CMS: https://github.com/Dydyrko/MyCMS

    "Админка" — отображение иерархия страниц сайта (не только публичных). Глубина иерархии не ограничена. Страницы можно добавлять (хоть списком), редактировать, удалять. Каждая страница может иметь галерею файлов. Есть инструмент работы с файлами CSS и JS: создание, подключение к странице или ко всем внутренним страницам, отображение таблицы связей CSS и JS со страницами.

    Редактировать страницы можно прямо на странице сайта — в режиме редактирования (доступном после авторизации) — как в ворде. Если при этом ещё и пользоваться консолью браузера — вообще полное управление редактированием HTML. После редактирования остаётся нажать кнопку сохранения — если результат устраивает Вас.

    Дополнительно есть редактор HTML, где можно применить изменения для отображения на странице, если результат устраивает Вас — можете сохранить изменения.

    Добавлять сайту желаемый функционал — нет проблем, вся структура "на ладони".


    1. kkmspb Автор
      25.08.2024 14:35

       свой вариант CMS: 

      Ну если говорить откровенно свой сайт я тоже сам на php -mysql-js-css сделал давно и как-то не вижу особых проблем с этим.

      Правда форум недавно прикрутил уже на phpbb конечно, главное бесплатно.


    1. olku
      25.08.2024 14:35

      Говорят, каждый хороший разработчик однажды делает свой фреймворк.


      1. kkmspb Автор
        25.08.2024 14:35

        Говорят, каждый хороший разработчик однажды делает свой фреймворк

        Кстати возможно для таких вэб разработчиков у нас есть АПИ БИТ драйвер ККТ, который наш плагин вордпресс и использует (печатаем чеки, принимаем банк.карты).