✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Віджети WordPress: об’єктно-орієнтований підхід

10

Багато років тому я створив WordPress Widget Boilerplate, маючи на меті бути наступним:

Упорядкований, зручний шаблон для створення віджетів із використанням найкращих практик WordPress.

Відтоді мало що змінилося щодо API Widgets (який ми розглянемо пізніше в цій публікації), але те, що я вважаю «найкращими практиками», змінилося. Крім того, ступінь, до якого я вважаю цей API надійним приклад ознайомлення з об’єктно-орієнтованим програмуванням у WordPress є високим.

Це не тому, що він використовує багато об’єктно-орієнтованих принципів, не тому, що він використовує сучасні стандарти (принаймні, що стосується сучасного PHP), а тому, що він використовує кілька речей, які допомагають нам розпізнати кілька, скажімо, сигнали щодо об’єктно-орієнтованого програмування в WordPress.

І це те, що не слід недооцінювати: якщо ви шукаєте приклади об’єктно-орієнтованого програмування в WordPress, шукайте API, які його використовують.

Крім того, якщо ви шукаєте способи оцінити свій власний рівень оцінювання фрагмента коду (не кажучи вже про кодову базу) для використання класів і деяких більш просунутих функцій ООП, тоді чому б не мати якийсь лакмусовий папірець, щоб побачити, як у вас справи?

І API Widgets робить саме це.

Віджети WordPress: вступ

Тож у меншій серії, ніж моя остання, я хочу розглянути API віджетів і зробити кілька речей:

  1. покаже вам базовий скелет віджета та чому він об’єктно-орієнтований,
  2. обговоріть, які речі ви повинні вміти помічати і чому,
  3. спочатку оновіть Widget Boilerplate безпосередньо на цьому сайті, а потім надішліть його на GitHub,
  4. створити віджет за допомогою API із шаблоном як основою для нашої роботи.

І в цій публікації ми почнемо з першого пункту вище.

Але спочатку…

Перш ніж перейти до цієї публікації, я рекомендую прочитати такі публікації:

  1. Два стовпи об’єктно-орієнтованого програмування: частина 1 з 2
  2. Два стовпи об’єктно-орієнтованого програмування: Частина 2 із 2
  3. Абстрактні заняття, частина 1 – Абстрагування поведінки
  4. Абстрактні класи, частина 2 – Абстрактні класи та інтерфейси

Після завершення (або якщо ви відчуваєте, що вже маєте знання про теми), ми готові до роботи.

[restrict paid="true”]

Основи API віджетів

Якщо ви прочитаєте сторінку довідника про віджети, ви побачите багато вмісту. Це добре, але це не завжди найкращий крок, коли ви намагаєтесь розкрити вміст такій аудиторії, як ви, коли вам потрібна практична, об’єктно-орієнтована порада.

Тож я виберу відповідні частини з документації API, а потім застосую це до коду, який ми також надаємо.

Що таке віджет?

Я думаю, що більшість із нас, хто працює з WordPress, знають, що таке віджет, але важливо визначити цей термін, щоб ми всі працювали над тією самою ідеєю. У посібнику сказано:

Віджет — це об’єкт PHP, який виводить деякий HTML. Один і той самий віджет можна використовувати кілька разів на одній сторінці (наприклад, текстовий віджет). Віджети можуть зберігати дані в базі даних (у таблиці параметрів).

Маючи це на місці, давайте подивимося на код спеціального віджета, принаймні на його частину, і подивимося, що ми можемо отримати, що стосується його об’єктно-орієнтованої природи.

Клас віджетів

Ще до того, як ми подивимося на код, ми знаємо, що буде певний рівень об’єктно-орієнтованого програмування просто тому, що документація каже нам робити три речі:

  1. Створіть свій клас віджета, розширивши стандартний клас WP_Widget і деякі його функції.
  2. Зареєструйте свій віджет, щоб він став доступним на екрані віджетів.
  3. Переконайтеся, що ваша тема має принаймні одну область віджетів, у яку можна додати віджети.

У цьому дописі я збираюся зосередитися на першому пункті (хоча ми зрештою дійдемо до того, як ми вводимо наші віджети в тему до завершення серії).

Отже, давайте викладемо код, як він представлений у документації, і поговоримо про те, чого ми можемо з нього навчитися:

<?php
class AcmeWidget extends WP_Widget 
{ 
    public function __construct() 
    {
    }

    public function widget($args, $instance) 
    {
    }

    public function form($instance)
    {
    }

    public function update($newInstance, $oldInstance)
    {
    }
}

По-перше, ми помічаємо, що хоча ми визначили клас (який ми можемо назвати як завгодно, на мій шлях), він повинен розширювати WP_Widget. Це означає, що в ядрі WordPress є клас WP_Widget. Ви можете переглянути добре організовану розбивку вихідного коду на цій сторінці.

По-друге, ключове слово extends вказує на те, що ми використовуємо успадкування PHP, яке є основою об’єктно-орієнтованого програмування.

По-третє, є чотири функції, які ми повинні реалізувати, дві з яких потребують аргументів. Функції, які ми повинні реалізувати, такі:

  • __construct(), який є базовим конструктором класу. Тут нам потрібно переконатися, що конструктор батьківського класу викликається, якщо він є, а потім ми ініціалізуємо будь-які властивості, які ми вважаємо необхідними для нашого віджета. Ми розглянемо це пізніше в серії.
  • widget() відповідає за виведення вмісту віджета, який користувач надає за допомогою інтерфейсу в адміністративній області. Він приймає два параметри – $args і $instance. Параметр $args — це інформація, яка буде відображена на сторінці, а $instance — це посилання на екземпляр віджета (оскільки на сторінці можна відобразити кілька віджетів).
  • form() відображає адміністративний інтерфейс, за допомогою якого користувач взаємодіє, щоб керувати тим, що виводиться на передній частині сайту. Він також вимагає аргументу $instance, щоб надавати інформацію про фактичний віджет, з яким працює користувач (а не про всі екземпляри віджета).
  • update() використовується для збереження значень у поточному екземплярі віджета. Він приймає два аргументи. Перший — це новий екземпляр віджета зі значеннями оновлення, які надав користувач (подумайте про оновлення значення активного текстового віджета), а другий аргумент — це старий екземпляр віджета або, можливо, попередній екземпляр, або, можливо, «екземпляр, який містив попередні значення».

Ці чотири функції необхідно реалізувати як частину API Widget, як частину успадкування функцій від розширеного інтерфейсу та для створення базової функціональності віджета.

Це не означає, що більше не можна додати, але в хорошому об’єктно-орієнтованому стилі, ймовірно, було б найкраще віднести цю поведінку до інших класів. Але ми розглянемо, як це зробити пізніше в цій серії, коли будемо створювати власний віджет.

Які ключові висновки?

Щоб переконатися, що я чітко розумію, що буде зрозуміло з цієї публікації, це таке:

  • API Widgets є об’єктно-орієнтованим. Він не лише об’єктно-орієнтований, тому що використовує клас (хоча це, безсумнівно, хороша відправна точка), але й тому, що він успадковує функціональні можливості, вбудовані у вже існуючий базовий клас.
  • Кожного разу, коли ми успадковуємо поведінку від базового класу або батьківського класу, ми безкоштовно отримуємо заздалегідь розроблену функціональність. Об’єктно-орієнтоване програмування — це справді чудово, тому що воно дозволяє нам зосередитися саме на логіці програмування, яку ми хочемо реалізувати.

Уявіть на мить, що ви хочете розробити віджет, але кожного разу, коли ви це робите, ви повинні писати всі функції, щоб підключитися до WordPress, щоб виконувати всі ті самі, повторювані шаблонні функції.

Саме тут вступають у гру успадкування та об’єктно-орієнтоване програмування. Повторюваний код абстрагується в базовий клас, тому він пишеться лише один раз, а потім код, на якому ми хочемо зосередитися, залишається для реалізації.

Усе вищесказане – це те, що слід розуміти, читаючи цей початковий крок у вихідному коді базового об’єктно-орієнтованого API у WordPress.

Що далі?

У наступному дописі цієї серії ми розглянемо об’єктно-орієнтовану природу Widgets API і те, що ви зможете відразу виявити, прочитавши код.

Це тому, що важливо розпізнавати певні об’єктно-орієнтовані принципи на практиці, і це хороший спосіб оцінити, чи можете ви це зробити чи ні. Якщо так, чудово! Тоді це продовжуватиме сприяти розвитку цих м’язів. Якщо ні, не хвилюйтеся – це все одно допоможе вам розвинути цей м’яз.

І це добре вам послужить, оскільки ми все більше переходимо до об’єктно-орієнтованої розробки WordPress практичними засобами.

Необхідну теорію висвітлено. Отже, давайте почнемо фактично застосовувати це на практиці.

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі