КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 712467 томов
Объем библиотеки - 1400 Гб.
Всего авторов - 274471
Пользователей - 125054

Новое на форуме

Новое в блогах

Впечатления

Влад и мир про Владимиров: Ирландец 2 (Альтернативная история)

Написано хорошо. Но сама тема не моя. Становление мафиози! Не люблю ворьё. Вор на воре сидит и вором погоняет и о ворах книжки сочиняет! Любой вор всегда себя считает жертвой обстоятельств, мол не сам, а жизнь такая! А жизнь кругом такая, потому, что сам ты такой! С арифметикой у автора тоже всё печально, как и у ГГ. Простая задачка. Есть игроки, сдающие определённую сумму для участия в игре и получающие определённое количество фишек. Если в

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
DXBCKT про Дамиров: Курсант: Назад в СССР (Детективная фантастика)

Месяца 3-4 назад прочел (а вернее прослушал в аудиоверсии) данную книгу - а руки (прокомментировать ее) все никак не доходили)) Ну а вот на выходных, появилось время - за сим, я наконец-таки сподобился это сделать))

С одной стороны - казалось бы вполне «знакомая и местами изьезженная» тема (чуть не сказал - пластинка)) С другой же, именно нюансы порой позволяют отличить очередной «шаблон», от действительно интересной вещи...

В начале

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Стариков: Геополитика: Как это делается (Политика и дипломатия)

Вообще-то если честно, то я даже не собирался брать эту книгу... Однако - отсутствие иного выбора и низкая цена (после 3 или 4-го захода в книжный) все таки "сделали свое черное дело" и книга была куплена))

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

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
DXBCKT про Москаленко: Малой. Книга 3 (Боевая фантастика)

Третья часть делает еще более явный уклон в экзотерику и несмотря на все стсндартные шаблоны Eve-вселенной (базы знаний, нейросети и прочие девайсы) все сводится к очередной "ступени самосознания" и общения "в Астралях")) А уж почти каждодневные "глюки-подключения-беседы" с "проснувшейся планетой" (в виде галлюцинации - в образе симпатичной девчонки) так и вообще...))

В общем герою (лишь формально вникающему в разные железки и нейросети)

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
Влад и мир про Черепанов: Собиратель 4 (Боевая фантастика)

В принципе хорошая РПГ. Читается хорошо.Есть много нелогичности в механике условий, заданных самим же автором. Ну например: Зачем наделять мечи с поглощением душ и забыть об этом. Как у игрока вообще можно отнять душу, если после перерождении он снова с душой в своём теле игрока. Я так и не понял как ГГ не набирал опыта занимаясь ремеслом, особенно когда служба якобы только за репутацию закончилась и групповое перераспределение опыта

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).

Разработка веб-приложений на WordPress [Брайан Мессенленер] (pdf) читать онлайн

-  Разработка веб-приложений на WordPress  [2-е издание, исправленное и дополненное] (и.с. Бестселлеры o’reilly) 36.97 Мб, 530с. скачать: (pdf) - (pdf+fbd)  читать: (полностью) - (постранично) - Брайан Мессенленер - Джейсон Коулман

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

SECOND EDITION

Building Web Apps
with Word Press
WordPress as an Application Framework

Brian Messenlehner and Jason Coleman

Beijing • Boston • Famham • Sebastopol • Tokyo

O’REILLY*

Брайан Мессенленер
Джейсон Коулман

Разработка
веб-приложений
на WordPress
WordPress как фреймворк

Санкт-Петербург

« БХВ-Петербург»

2021

УДК 004.4’236
ББК 32.973.26-018
М53

Мессенленер, Б.
М53

Разработка веб-приложений на WordPress: Пер. с англ. / Б. Мессенленер,
Д. Коулман. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2021. —
528 с.: ил.
ISBN 978-5-9775-6753-4

Подробно рассматривается создание веб-приложений на платформе WordPress,
в том числе для мобильных устройств, принципы работы таких приложений. Описана
структура каталогов и базы данных, приведены типы записей, метаданных и таксо­
номий, перечислены основные классы и функции. Уделено внимание разработке соб­
ственной темы оформления с адаптивным дизайном. Рассказывается о типах пользо­
вателей и их ролях в архитекзуре WordPress. Огдельная глава посвящена работе
с API-интерфейсами, объектами и вспомогательными функциями, рассматриваются
вопросы безопасности веб-приложений, принципы написания безопасного кода. Изу­
чается REST API в WordPress, JavaScript-фреймворки, способы локализации прило­
жений. Описаны принципы построения многосайтовых сетей, оптимизации и мас­
штабирования. Рассматривается проект Gutenberg и его возможности.
Во втором издании авторы рассматривают новые функции и возможности акту­
альных версий WordPress. Все примеры кода из книги доступны на веб-сервисе
GitHub.

Дня веб-разработчиков
УДК 004.4'236
ББК 32.973.26-018
Группа подготовки издания:
Руководи гель проекза
Зав редакцией

Перевод с английского
Компьютерная верстка

Оформление обложки

Павел Шилин
Людмила I ау /ь
Михаила Райтмана
Натальи Смирновой
Карины Соловьевой

С 2021 BHV

Authonzed Russian translation of the English edition of Building Web Apps with WordPress 2nd edition ISBN 9781491990087
С 2020 Brian Messenlehner and Jason Coleman
This translation is published and sold by permission of O’Reilly Media, Inc , which owns or controls all rights to publish
and sell the same.
Авториюванный перевод с английского языка на русский издания Building Web Apps with WordPress 2nd edition
ISBN 9781491990087 C 2020 Brian Messenlehner и Jason Coleman
Перевод опубликован и продается с разрешения компании-правообладателя O’Reilly Media, Inc.

Подписано в печать 09 04 21
Формат 70x1001/16 Печать офсетная Усл печ л 42,57
Тираж 1000 экз Заказ №8042
"БХВ-Петербург", 191036, Санкт-Петербург, Гончарная ул , 20

Отпечатано в ПАО «Можайский полиграфический комбинат»
143200, Россия, г Можайск, ул Мира, 93
www oaompk ru тел (495) 745-84-28, (49638) 20-685

ISBN 978-1-491-99008-7 (англ.)
ISBN 978-5-9775-6753-4 (рус.)

СО Brian Messenlehner, Jason Coleman, 2020
«7 Перевод на русский язык, оформление
ООО "ЬХВ-Петербур!", ООО "БХВ", 2021

Оглавление
Вступительное слово.................................................................................................................. 15
Предисловие.................................................................................................................................17
Для кого предназначена эта книга............................................................................................. 17
Для кого НЕ предназначена эта книга.......................................................................................18
Структура книги........................................................................................................................... 18
О коде программ...........................................................................................................................20
Условные обозначения................................................................................................................ 20
Использование примеров программногокода......................................................................... 21
Благодарности............................................................................................................................. 23

ГЛАВА 1. Создание веб-приложений спомощью WordPress......................................... 25
Что такое веб-сайт?......................................................................................................................25
Что такое приложение?............................................................................................................... 25
Что такое веб-приложение? ........................................................................................................ 25
Функции веб-приложения................................................................................................... 26
Мобильные приложения...................................................................................................... 27
Прогрессивные веб-приложения....................................................................................... 28
Зачем нужен WordPress?............................................................................................................. 29
Вы уже используете WordPress.......................................................................................... 29
С помощью WordPress легко управлять контентом....................................................... 29
WordPress позволяет просто и безопасно управлять пользователями........................30
Плагины................................................................................................................................. 30
Гибкость важна.....................................................................................................................31
Частые обновления безопасности...................................................................................... 31
Стоимость.............................................................................................................................. 32
Ответы на некоторые распространенные критические мнения о WordPress............ 32
Когда не следует использовать WordPress...............................................................................35
Вы планируете лицензировать или продавать технологию своего сайта.................. 35
Имеется другая платформа, котораяприведет вас к цели быстрее.............................. 36
Гибкость не важна для вас..................................................................................................36
Ваше приложение должно работать в режиме реального времени............................. 37
WordPress как фреймворк........................................................................................................... 37
WordPress и фреймворки Framework-View-Controller ................................................... 38
Анатомия приложения WordPress............................................................................................. 40
Что такое SchoolPress?......................................................................................................... 41
SchoolPress работает в многосайтовой сети WordPress................................................. 41
Бизнес-модель SchoolPress................................................................................................. 41
Уровни участия и роли пользователей............................................................................. 42
Классы — это группы BuddyPress..................................................................................... 42
Назначения — это СРТ........................................................................................................ 42
Представления (подтип) СРТ для назначений................................................................ 43
Семестры являются таксономией для класса СРТ......................................................... 43

Департаменты являются таксономией для класса СРТ................................................ 43
SchoolPress имеет один основной пользовательский плагин....................................... 43
В SchoolPress есть несколько других пользовательских плагинов............................ 44
SchoolPress использует тему Memberlite.......................................................................... 44
ГЛАВА 2. Основы WordPress................................................................................................. 46
Структура каталогов WordPress................................................................................................ 46
Корневой каталог................................................................................................................. 46
Структура базы данных WordPress........................................................................................... 48
Таблица wp options..............................................................................................................49
Функции в каталоге /wp-includes/option.php ....................................................................49
Таблица wp_users................................................................................................................. 51
Функции в каталоге /wp-includes/...................................................................................... 52
Таблица wp_usermeta........................................................................................................... 55
Таблица wp_posts................................................................................................................. 59
Функции в каталоге /wp-includes/post.php....................................................................... 60
Таблица wp_postmeta........................................................................................................... 64
Функции из каталога /wp-includes/post.php..................................................................... 64
Таблица wp comments.......................................................................................................... 68
Функции в каталоге /wp-includes/comment.php.............................................................. 69
Таблица wpcommentsmeta................................................................................................. 73
Функции из каталога /wp-includes/comment.php............................................................ 73
Таблица wp_terms................................................................................................................. 75
Функции в каталоге /wp-includes/taxonomy.php............................................................. 76
Таблица wptermmeta........................................................................................................... 79
Таблица wp term taxonomy................................................................................................ 81
Функции в каталоге /wp-includes/taxonomy.php............................................................. 81
Таблица wp_termrelationships........................................................................................... 82
Хуки: события и фильтры........................................................................................................... 83
События................................................................................................................................. 84
Фильтры................................................................................................................................. 85
Среды разработки и хостинг......................................................................................................86
Работа локально................................................................................................................... 86
Выбор веб-хостинга............................................................................................................. 87
Среды разработки, интеграции и доставки...................................................................... 87
Расширение WordPress........................................................................................................ 88
ГЛАВА 3. Использование плагинов WordPress............................................................... 89
General Public License, версия 2................................................................................................ 90
Установка плагинов WordPress................................................................................................. 90
Создание собственного плагина................................................................................................ 91
Структура файла плагина приложения.....................................................................................92
Каталог /adminpages/............................................................................................................ 93
Каталог /classes/.................................................................................................................... 94
Каталог /css/........................................................................................................................... 94
Каталог /js/............................................................................................................................. 95
Каталог /images/................................................................................................................... 96
Каталог /includes/................................................................................................................. 96
Каталог /includes/lib/............................................................................................................ 97
Каталог /pages/...................................................................................................................... 97

Каталоги /services/ и /scheduled/......................................................................................... 98
Файл schoolpress.php............................................................................................................ 98
Дополнения к существующим плагинам.................................................................................. 99
Случаи из практики и примеры.................................................................................................. 99
Цикл WordPress................................................................................................................... 100
Глобальные переменные WordPress................................................................................ 100
Бесплатные плагины.................................................................................................................. 111
Admin Columns.................................................................................................................... 111
Advanced Custom Fields................................................................................................... 111
BadgeOS................................................................................................................................112
Posts 2 Posts.........................................................................................................................112
Members................................................................................................................................113
W3 Total Cache.................................................................................................................... 113
Yoast SEO............................................................................................................................. 113
Премиальные плагины............................................................................................................. 114
Gravity Forms....................................................................................................................... 114
BackupBuddy........................................................................................................................ 114
WP All Import..................................................................................................................... 115
Плагины сообщества.................................................................................................................. 115
BuddyPress........................................................................................................................... 115
ГЛАВА 4. Темы......................................................................................................................... 128
Темы и плагины.......................................................................................................................... 128
Где разместить код при разработке приложений.......................................................... 128
Где разместить код при разработке плагинов............................................................... 129
Где разместить код при разработке тем.......................................................................... 129
Иерархия шаблонов.................................................................................................................... 130
Шаблоны страниц....................................................................................................................... 131
Образец шаблона страницы.............................................................................................. 131
Использование хуков для копирования шаблонов....................................................... 134
Когда следует использовать шаблон темы?.................................................................. 136
Функции WordPress для работы с темами.............................................................................. 136
Использование переменной locate template в плагинах.............................................. 137
Файл style.css....................................................................................................................... 139
Создание версий CSS-файлов вашей темы.................................................................... 140
Файл functions.php...................................................................................................................... 141
Темы и СРТ.................................................................................................................................. 142
Популярные фреймворки для разработки тем.......................................................................142
Фреймворки тем WordPress............................................................................................... 142
Сторонние фреймворки тем.............................................................................................. 144
Создание дочерней темы для Memberlite............................................................................... 144
Включение Bootstrap в тему вашего приложения................................................................ 145
Меню............................................................................................................................................. 146
Навигационные меню........................................................................................................ 147
Динамические меню.......................................................................................................... 148
Адаптивный дизайн.................................................................................................................... 148
Определение устройства и дисплея с помощью CSS.................................................. 149
Определение устройств и их свойств в JavaScript........................................................ 150
Определение устройства в РНР....................................................................................... 153
Последнее замечание по определению браузера.......................................................... 157

ГЛАВА 5. Пользовательские типы записей, метаданные записей и таксономия.... 158
Типы сообщений по умолчанию и СРТ.................................................................................. 158
Страница.............................................................................................................................. 158
Публикация.......................................................................................................................... 158
Вложение............................................................................................................................. 158
Редакции.............................................................................................................................. 159
Элемент меню навигации..................................................................................................159
Пользовательский CSS...................................................................................................... 159
Наборы изменений............................................................................................................. 159
Кеш oEmbed......................................................................................................................... 159
Пользовательские запросы................................................................................................160
Повторно используемые блоки........................................................................................ 160
Определение и регистрация СРТ............................................................................................ 160
Функция register_post_type($post_type, $args)............................................................... 161
Что такое таксономия и как ее использовать?...................................................................... 168
Таксономии и метаданные постов................................................................................... 169
Создание пользовательских таксономий....................................................................... 171
Функция register taxonomy(Staxonomy, Sobjecttype, $args).......................................171
Функция register taxonomyJbr_object_type($taxonomy, $object_type)......................174
Использование СРТ и таксономий в ваших темах и плагинах........................................... 175
Тема архива и файлы шаблона Single...........................................................................175
Старый добрый класс WP Query и методов/_posts().................................................. 175
Метаданные и СРТ..................................................................................................................... 179
Функция add_meta_box($id, Stitle, ^callback, $screen, Scontext, Spriority,
Scallbackargs)..................................................................................................................... 179
Использование метаблоков в редакторе блоков Block Editor.................................... 182
Пользовательские классы-оболочки для СРТ....................................................................... 183
Расширение класса WP Post в сравнении с созданием класса-обертки...................186
Зачем нужны классы Wrapper?........................................................................................ 186
Держите СРТ и таксономии вместе................................................................................. 186
Держите все в классе-обертке.......................................................................................... 188
Классы Wrapper читаются лучше.................................................................................... 190
ГЛАВА 6. Пользователи, их роли и возможности...........................................................191
Получение данных пользователей.......................................................................................... 192
Добавляем, обновляем и удаляем пользователей................................................................. 194
Хуки и фильтры.......................................................................................................................... 198
Что такое роли и возможности?...............................................................................................199
Проверка роли и возможностей пользователя............................................................. 200
Создание собственных ролей и возможностей............................................................ 202
Расширение класса WP User................................................................................................... 204
Добавление полей регистрации и профиля........................................................................... 206
Настройка таблицы пользователей на административной панели................................... 211
Плагины....................................................................................................................................... 213
Theme Му Login................................................................................................................. 213
Hide the Admin Bar............................................................................................................. 213
Paid Memberships Pro......................................................................................................... 213
PMPro Register Helper........................................................................................................ 214
Members...............................................................................................................................214
WP User Fields.................................................................................................................... 215

ГЛАВА 7. Работа с API-интерфейсами WordPress,
объектами и вспомогательными функциями.................................................................. 216
API шорткодов............................................................................................................................ 216
Атрибуты шорткода........................................................................................................... 217
Вложенные шорткоды....................................................................................................... 218
Удаление шорткодов......................................................................................................... 219
Другие полезные функции, связанные с шорткодами................................................. 220
API виджетов.............................................................................................................................. 220
Прежде чем добавить свой собственный виджет......................................................... 221
Добавление виджетов........................................................................................................ 221
Определение области виджета......................................................................................... 225
Встраивание виджета вне динамической боковой панели..........................................227
Удаление виджетов с панели инструментов.................................................................. 229
Добавление собственного виджета на панель инструментов.................................... 231
API настроек............................................................................................................................... 234
Вам действительно нужна страница настроек?.............................................................234
Не могли бы вы использовать вместо этого хук или фильтр?................................... 235
Учет стандартов при добавлении настроек................................................................... 236
Игнорирование стандартов при добавлении настроек................................................237
API перезаписи........................................................................................................................... 238
Добавление правил перезаписи....................................................................................... 238
Сброс правил перезаписи.................................................................................................. 239
Другие функции перезаписи............................................................................................ 240
Функция WP-Cron...................................................................................................................... 243
Добавление своих интервалов......................................................................................... 245
Планирование единичных событий................................................................................246
Запуск заданий Cron с сервера......................................................................................... 246
Использование только серверного Cron........................................................................ 247
Функция WP Mail.......................................................................................................................248
Отправка более приятных писем с помощью WordPress............................................ 249
API заголовка файла.................................................................................................................. 250
Добавление заголовков файлов в ваши собственные файлы..................................... 253
Добавление новых заголовков в плагины и темы........................................................ 254
Heartbeat API............................................................................................................................... 255
ГЛАВА 8. Безопасность в WordPress.................................................................................. 260
Почему это важно....................................................................................................................... 260
Основные меры безопасности..................................................................................................261
Регулярно выполняйте обновление.................................................................................261
Не используйте имя пользователя ’’admin”.................................................................... 261
Выбирайте надежный пароль........................................................................................... 261
Примеры плохих паролей................................................................................................. 262
Примеры хороших паролей.............................................................................................. 262
Усиление защиты в WordPress................................................................................................ 263
Запретите администраторам редактировать плагины и темы.................................... 263
Измените префикс таблиц базы данных........................................................................ 263
Переместите в другое место файл wp-config.php......................................................... 264
Не отображайте сообщения об ошибках авторизации................................................ 265
Не отображайте номер версии WordPress...................................................................... 265
Исключите возможность авторизации через страницу wp-login.php....................... 266

Добавьте в файл *.htaccess кастомные правила, блокирующие доступ
к каталогу wp-admin......................................................................................................... 267
SSL-сертификаты и HTTPS.................................................................................................... 268
Установка SSL-сертификата на сервере.......................................................................268
Авторизация и доступ к панели администратора WordPress по протоколу SSL... 271
Отладка проблем с протоколом HTTPS........................................................................272
’’Атомный’’ способ устранения ошибок протокола SSL............................................ 273
Резервируйте все!..................................................................................................................... 275
Сканируйте, сканируйте и еще раз сканируйте!................................................................. 275
Полезные плагин для обеспечения безопасности............................................................... 276
Плагины для блокировки спама..................................................................................... 276
Плагины для резервного копирования.......................................................................... 276
Плагины-брандмауэры/сканеры .................................................................................... 277
Плагины для защиты авторизации и пароля............................................................... 278
Написание безопасного кода.................................................................................................. 278
Проверяйте полномочия пользователей ........................................................................ 278
Кастомные инструкции SQL.......................................................................................... 280
Валидация, санация и экранирование данных............................................................ 280
Одноразовые коды........................................................................................................... 284

ГЛАВА 9. JavaScript-фреймворки и рабочий процесс................................................ 291
Что такое ECMAScript?............................................................................................................. 292
Что такое ES6?............................................................................................................................ 293
Что такое ES9?............................................................................................................................ 293
Что такое ESNext?..................................................................................................................... 293
Что такое Ajax?........................................................................................................................... 293
Что такое JSON?......................................................................................................................... 293
jQuery и WordPress...................................................................................................................294
Подключение других JavaScript-библиотек................................................................. 295
Где следует размещать кастомный JavaScript-код..................................................... 296
Ajax-вызовы в WordPress с использованием jQuery.......................................................... 297
Управление количеством Ajax-запросов..............................................................................302
Heartbeat API............................................................................................................................. 304
Инициализация................................................................................................................. 304
Клиентский JavaScript-код............................................................................................. 305
Серверный РНР-код......................................................................................................... 306
Инициализация................................................................................................................. 307
Клиентский JavaScript-код............................................................................................. 308
Серверный РНР-код......................................................................................................... 309
Ограничения WordPress в плане асинхронной обработки................................................ 310
JavaScript-фреймворки............................................................................................................ 311
Backbone.js......................................................................................................................... 311
React................................................................................................................................... 312

ГЛАВА 10. REST API в WordPress....................................................................................314
Что такое REST API?............................................................................................................... 314
API....................................................................................................................................... 314
REST................................................................................................................................... 315
JSON................................................................................................................................... 315
HTTP.................................................................................................................................. 315

Зачем нужен REST API в WordPress?..................................................................................... 318
Использование WordPress REST API версии 2..................................................................... 320
Обнаружение....................................................................................................................... 320
Аутентификация................................................................................................................. 320
Маршруты и конечные точки.......................................................................................... 326
Запросы................................................................................................................................ 326
Ответы.................................................................................................................................. 328
Добавление собственных маршрутов и конечных точек.................................................... 329
Функция register_rest_route($namespace, $route, $args, $override)...........................329
Настройка плагина WordPress Single Sign-On............................................................... 330
Добавление маршрута /wp-sso/vl/check......................................................................... 330
Подключение к нашему плагину базовой аутентификации....................................... 332
Использование настроенной нами конечной точки
для проверки учетных данных пользователя................................................................ 333
Популярные плагины, использующие WordPress REST API............................................. 334
WooCommerce.....................................................................................................................335
BuddyPress........................................................................................................................... 336
Paid Memberships Pro......................................................................................................... 338
ГЛАВА IL Проект Gutenberg, блоки и кастомные типы блоков.............................. 342
Редактор системы WordPress.................................................................................................... 343
Плагин Classic Editor................................................................................................................. 344
Блоки для контента и дизайна..................................................................................................344
Блоки для представления функциональности....................................................................... 344
Создание собственных блоков.................................................................................................345
Пример простейшего блока.............................................................................................. 345
Использование кастомных блоков для разработки интерфейсов приложений.............. 347
Активация редактора блоков для кастомных типов постов....................................... 347
Категории блоков............................................................................................................... 348
Блоки домашнего задания.................................................................................................349
Ограничение типа блоков до определенных кастомных типов постов................... 349
Ограничение кастомного типа постов до определенных блоков.............................. 350
Шаблоны блоков................................................................................................................ 351
Сохранение данных блока в метаданных поста............................................................353
Советы..........................................................................................................................................354
Активируйте режим отладки с помощью константы WP SCRIPT DEBUG........... 354
Задавайте версию скрипта с помощью функции filemtime()...................................... 355
Дополнительные советы.................................................................................................... 355
Глубже изучите JavaScript, Node.js и React................................................................... 355

ГЛАВА 12. Многосайтовые сети в WordPress................................................................. 357
Когда целесообразна многосайтовость?................................................................................. 357
Когда лучше отказаться от многосайтовости?...................................................................... 358
Альтернативы многосайтового режима.................................................................................359
Множество авторов или категорий на одном и том же WordPress-сайте................ 359
Кастомные типы постов................................................................
359
Абсолютно самостоятельные сайты................................................................................360
Сервис обслуживания WordPress-сайтов....................................................................... 360
Мультиарендность ............................................................................................................. 360
Настройка многосайтовой сети............................................................................................... 360

Администрирование многосайтовой сети............................................................................. 363
Панель администратора.................................................................................................... 363
Сайты................................................................................................................................... 363
Пользователи...................................................................................................................... 364
Темы..................................................................................................................................... 365
Плагины............................................................................................................................... 365
Настройки............................................................................................................................ 365
Обновления..........................................................................................................................366
Структура базы данных многосайтовой сети....................................................................... 367
Общесетевые таблицы.......................................................................................................367
Индивидуальные таблицы сайтов.................................................................................. 369
Совместно используемые таблицы сайтов.................................................................... 370
Сопоставление доменов............................................................................................................370
Некоторые полезные плагины для многосайтового режима............................................. 371
Расширение User Registration для плагина Gravity Forms.......................................... 372
Расширение Member Network Sites для плагина Paid Memberships Pro................... 372
Плагин More Privacy Options............................................................................................ 372
Плагин Multisite Global Media.......................................................................................... 372
Плагин Multisite Plugin Manager...................................................................................... 372
Плагин Multisite Global Search......................................................................................... 373
Плагин Multisite Robots.txt Manager............................................................................... 373
Плагин NS Cloner: Site Copier.......................................................................................... 373
Плагин WP Multi Network................................................................................................ 373
Основная функциональность многосайтовости................................................................... 373
Переменная Sblogid.......................................................................................................... 374
Функция is_multisite()........................................................................................................374
Функция get current_blog_id().........................................................................................374
Функция switch to_blog($new blog)............................................................................... 375
Функция restore current_blog()....................................................................................... 375
Функция get_blog_details($fields = null, Sgetall = true)............................................ 376
Функция update blog details($blog_id, Sdetails = array())......................................... 377
Функция get_blog_status($id, Spref)................................................................................ 378
Функция update_blog_status($blog_id, Spref $value)................................................... 378
Функция get_blog_option($id, Soption, Sdefault = false)...............................................378
Функция update_blog_option($id, $option, Svalue)........................................................ 379
Функция delete blog_option($id, Soption)....................................................................... 379
Функция get_blog_post($blog_id, Spostid).................................................................... 379
Функция add_user_to_blog($blog_id, Suserid, Srole).................................................. 380
Функция wpmu delete user(Suser id)............................................................................. 380
Функция create empty blog (Sdomain, Spath, Sweblogtitle, Ssiteid = 1)................ 381
He упомянутые здесь функции........................................................................................ 381

ГЛАВА 13. Локализация приложений WordPress......................................................... 382
Нужна ли локализация вашему приложению?..................................................................... 382
Как выполняется локализация в WordPress.......................................................................... 383
Определение локали в WordPress........................................................................................... 383
Текстовые домены..................................................................................................................... 384
Настройка текстового домена.......................................................................................... 384
Подготовка строк с помощью функций перевода............................................................... 386
Функция__ (Stext, $domain = "default").......................................................................... 387
Функция _e($text, Sdomain = "default").......................................................................... 387

Функция _x($text, Scontext, Sdomain =
388
Функция _ex($title, Scontext, Sdomain = "default”)....................................................... 388
Сочетание перевода с экранированием.......................................................................... 389
Создание и загрузка файлов перевода.................................................................................... 389
Организация файлов локализации................................................................................... 390
Генерирование файла *.pot...............................................................................................390
Создание файла *.ро.......................................................................................................... 392
Создание файла *.то......................................................................................................... 392
GlotPress...................................................................................................................................... 392
Использование GlotPress для ваших плагинов и тем в репозитории
WordPress.org....................................................................................................................... 393
Создание собственного сервера GlotPress..................................................................... 393

ГЛАВА 14. Оптимизация и масштабирование WordPress........................................... 394
Терминология............................................................................................................................. 394
Источник или внешнее окружение?....................................................................................... 396
Тестирование.............................................................................................................................. 396
Что следует тестировать....................................................................................................397
Панель отладки браузера Chrome....................................................................................399
Инструмент Site Health системы WordPress.................................................................. 401
Apache Bench....................................................................................................................... 402
Siege.....................................................................
409
W3 Total Cache............................................................................................................................ 410
Настройки страничного кэширования........................................................................... 411
Минимизация......................................................................................................................413
Кэширование базы данных............................................................................................... 414
Объектное кэширование.................................................................................................... 414
Сети доставки контента..................................................................................................... 415
GZlP-сжатие........................................................................................................................415
Хостинг.........................................................................................................................................415
Хостинги, специально предназначенные для WordPress-сайтов............................... 416
Развертывание собственного сервера............................................................................ 416
Выборочное кэширование........................................................................................................ 430
API для работы с транзиентами....................................................................................... 431
Транзиенты в многосайтовом режиме........................................................................... 434
Повышение производительности с помощью JavaScript-кода...........................................434
Кастомные таблицы................................................................................................................... 436
Действие в обход WordPress.....................................................................................................438
ГЛАВА 15. Электронная коммерция.................................................................................. 440
Выбор плагина............................................................................................................................ 440
WooCommerce.................................................................................................................... 440
Paid Memberships Pro.........................................................................................................443
Easy Digital Downloads....................................................................................................... 444
Платежные системы.................................................................................................................. 447
Торговые счета............................................................................................................................ 448
Настройка модели SaaS с помощью Paid Memberships Pro................................................ 449
Модель SaaS........................................................................................................................449

ГЛАВА 16. Мобильные приложения на платформе WordPress................................. 464
Сценарии использования мобильных приложений..............................................................464

Нативные и гибридные мобильные приложения................................................................. 465
Что такое нативное мобильное приложение?............................................................... 465
Что такое гибридное мобильное приложение?............................................................ 466
Почему стоит создавать гибридные приложения вместо нативных?....................... 466
Cordova................................................................................................................................. 467
Ionic Framework.................................................................................................................. 471
Приложение-обертка........................................................................................................ 473
AppPresser........................................................................................................................... 473
ГЛАВА 17. PHP-библиотеки, интеграция веб-сервисов и миграция
с других платформ................................................................................................................... 488
РНР-библиотеки........................................................................................................................ 488
Генерация и модификация изображений.......................................................................489
Генерация PDF................................................................................................................... 491
Геолокация и геотаргетинг............................................................................................... 494
Сжатие и архивация данных............................................................................................ 496
Инструменты для разработки.......................................................................................... 500
Внешние API-интерфейсы и веб-сервисы............................................................................. 502
Elasticsearch......................................................................................................................... 502
ElasticPress by 1 Oup............................................................................................................ 502
Google Vision...................................................................................................................... 503
Google Maps.........................................................................................................................503
Google Translate.................................................................................................................. 504
Twilio.................................................................................................................................... 504
Другие популярные API-интерфейсы............................................................................ 505
Миграция..................................................................................................................................... 506
Миграция между серверами............................................................................................. 507
Миграция между платформами....................................................................................... 508
Руководство по привязке данных.................................................................................... 510

ГЛАВА 18. Взгляд в будущее................................................................................................ 511
Оглядываясь назад..................................................................................................................... 511
REST API..................................................................................................................................... 512
Плагины WordPress будут уделять больше внимания API-интерфейсам................ 512
’’Обезглавленные” версии WordPress............................................................................. 512
GraphQL............................................................................................................................... 513
Gutenberg..................................................................................................................................... 514
Интерфейс администратора перейдет на React/Gutenberg......................................... 514
Gutenberg будет применяться для редактирования контента
на клиентской стороне WordPress...................................................................................514
Шаблоны блоков заменят темы оформления................................................................514
Блоки заменят плагины.....................................................................................................515
Доля WordPress на рынке будет колебаться......................................................................... 515
WordPress станет более популярной платформой для мобильной разработки............... 516
WordPress будет оставаться хорошим выбором для разработки любого рода
приложений................................................................................................................................. 516
Об авторах.................................................................................................................................. 517

Предметный указатель........................................................................................................... 518

Вступительное слово

В течение последних нескольких лет я проводил от 15 до 24 выходных каждый год,
встречаясь с разработчиками программного обеспечения по всей стране. В итоге
после примерно 25 тыс. диалогов я убедился в трех простых фактах:
♦ Веб-приложения встречаются повсеместно.

Трудно представить жизнь без веб-приложений. Сегодня мы управляем нашими
банковскими счетами онлайн. Мы бронируем отели и отдых онлайн с помощью
веб-приложений; мы платим наши налоги онлайн в чем-то вроде приложения;
мы записываемся в парикмахерскую перед визитом, используя то, что кажется
простой формой, но это тоже приложение. Веб-приложения вездесущи.
♦ Веб-разработчики чувствуют себя совершенно неспособными создавать веб­
приложения.

Если вы поговорите с обычными пользователями, то каждый из них скажет, что
у него есть друг-разработчик — гений, который может делать что угодно с ком­
пьютером. Но если вы потратите время на разговоры непосредственно с разра­
ботчиками, то обнаружите, что они видят мир совсем по-другому.
Они смотрят на веб-приложения, которые считают ’’реальными”, и на компании,
стоящие за ними, и убеждены, что люди, которые работают ”гам”, знают о соз­
дании веб-приложений то, что никому не известно.

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

Когда вы разговариваете с разработчиками о веб-приложениях, то быстро обна­
руживаете, что отсутствующий элемент — это уверенность, ее не хватает боль­
ше всего. Написать программный код не сложно, если вы знаете, что необходи­
моделать. Но это не значит, что разработчикам не нужно понимать процесс
глубже.
Наши беседы проходили по всей стране на местных конференциях под названием
WordCamps. Это общественные мероприятия, которые обычно посещают от 200 до
500 участников — в равной степени как разработчики, так и пользователи прило­
жений. Но все они используют (или намереваются это сделать) продукт веб­
публикации под названием WordPress.

15

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

Об этом пойдет речь на страницах данной книги.
Мне нравится в этой книге, что первые главы достаточно подробны. Это помогает
читателям медленно погрузиться в предмет и придает уверенность. И я знаю, на­
сколько важным это обстоятельство будет для вас. Образно выражаясь, книга соз­
дает ’’дорожную карту”, показывая, как добраться от того места, где вы находитесь,
до того места, где вы хотите оказаться.

Но ценность этой книги заключается еще и в том, что она глубже ’’вдавливает” вас
в детали каждой строки кода, которую вам нужно написать. Что-то будет новым
для вас, что-то — нет. Но чего вы здесь точно не найдете, так это абстрактных опи­
саний, которые никак не объясняются и оставляют открытым вопрос, как приме­
нить полученные знания.
Брайан и Джейсон знакомят вас с каждой составной частью WordPress, которую вы
должны знать, чтобы применить его в качестве основы веб-приложения. Сегодня
существуют курсы программирования, ориентированные на преподавание именно
этого материала. К счастью, вам не придется платить за подобные курсы, которые
стоят намного дороже, чем эта книга. И это, пожалуй, лучшая реклама данной книги.

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

Когда вы прочитаете эту книгу до конца, изучите теорию и ’’поиграете" с про­
граммным кодом, когда вы заставите его работать, то поймете, что существует
только один вид разработчика: тот, который способен создавать все, что только
можно представить, и вы станете именно таким разработчиком.

Тот факт, что вы сейчас читаете эти строки, уже подтверждает сказанное. Теперь
вам пора идти дальше и реализовать свой потенциал.
Крис Лема, вице-президент по продуктам и инновациям в Liquid Web

16

|

Вступительное слово

Предисловие

На момент написания этой книги WordPress поддерживает 32% всех сайтов в Ин­
тернете, и это число растет. Многие разработчики хотят расширить возможности
своих сайтов WordPress, но считают, что им нужно перейти к более традиционной
среде приложений, такой как Ruby on Rails, Symfony, Yii или Laravel, для создания
’’настоящих” веб-приложений. Такое мнение неверно, и мы здесь, чтобы исправить
это заблуждение.

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

Для кого предназначена эта книга
Эта книга будет наиболее полезна для разработчиков WordPress, желающих созда­
вать более ’’тяжелые” приложения, и для программистов РНР, имеющих некоторый
опыт работы с WordPress, ищущих среду создания приложений на основе РНР.

Коммерческие разработчики плагинов и те, кто работает над крупными распреде­
ленными проектами WordPress, также найдут полезными концепции и методы этой
книги.
Если вы PHP-программист или независимый от языка разработчик, использующий
другую платформу, и пользуетесь огромной библиотекой плагинов и тем
WordPress, то вы возможно удивитесь, узнав, насколько хорошо WordPress может
работать как фреймворк. Чтение этой книги и выполнение упражнений из нее мо­
гут изменить вашу трудовую жизнь в лучшую сторону.

Мы предполагаем, что читатели имеют общие сведения о программировании на
РНР. Вы также должны обладать базовыми знаниями HTML и CSS, а также быть
знакомыми с MySQL и SQL-запросами. Понимание основ JavaScript и программи­
рования jQuery понадобится в главе 9 и при рассмотрении связанных примеров.

17

Для кого НЕ предназначена эта книга
Эта книга не для тех, кто хочет научиться работать с WordPress в качестве пользо­
вателя. В ней изложены краткие введения о стандартной функциональности WordPress, но мы предполагаем, что вы уже знакомы с WordPress с точки зрения пользо­
вателя.
Эта книга не предназначена для непрограммистов. Несмотря на то, что можно соз­
давать очень функциональные веб-приложения, просто комбинируя и конфигури­
руя множество плагинов, доступных для WordPress, эта книга написана для разра­
ботчиков, создающих свои собственные плагины и темы для новых веб­
приложений.

Эта книга не научит вас программировать, а скорее научит программировать "пу­
тем WordPress".

Структура книги
Мы надеемся, что благодаря этой книге вы изучите методы программирования и
проектирования, а также освоите лучшие практики для разработки сложных при­
ложений с использованием WordPress.
Глава 1 определяет, что мы подразумеваем под "веб-приложением", а также описы­
вает, почему следует (или не следует) создавать веб-приложения на WordPress, и
как сравнивать WordPress с другими фреймворками. Мы также представляем
SchoolPress, приложение WordPress, которое служит нам в качестве примера на
протяжении всей книги.
Глава 2 охватывает основы WordPress. Мы просматриваем различные каталоги ба­
зовой установки WordPress. Мы также объясняем каждую таблицу базы данных,
созданную WordPress, какие данные хранятся в каждой и какие функции WordPress
отображаются на эти таблицы. Даже если вы опытный разработчик WordPress, вы
можете кое-что узнать из этой главы, и мы рекомендуем вам прочитать ее.

Глава 3 повествует все о плагинах. Что это такое? Как создавать свои собственные
плагины? Как вы должны структурировать основной плагин вашего приложения?
Когда вы должны использовать сторонние плагины или свои собственные?
Глава 4 — это все о темах. Как работают темы? Как темы отображаются на пред­
ставления в типичной структуре "модель - представление - контроллер" (MVC)?
Какой код должен входить в вашу тему, а какой — в плагины? Еще мы рассмотрим
использование фреймворков тем и UI, а также познакомимся с основами адаптив­
ного дизайна.

Глава 5 описывает пользовательские типы записей и таксономию. Мы рассмотрим
стандартные типы записей, встроенные в WordPress, выясним, почему вам может
потребоваться создать свои собственные, а затем опишем, как это сделать. Мы так­
же расскажем о метаданных и таксономиях публикаций, о том, для чего каждый из
них подходит, и о том, как создавать собственные таксономии и сопоставлять их с

18

|

Предисловие

вашими типами записей. Наконец, мы покажем, как создавать классы-обертки для
ваших типов записей, чтобы оптимизировать ваш код с помощью объектноориентированного программирования (ООП).

Глава 6 посвящена пользователям, их роли и возможностям. Мы покажем, как до­
бавлять, обновлять и удалять пользователей программно и как работать с метаро­
лями, ролями и правами пользователей. Мы также покажем, как расширить класс
wp user для ваших пользовательских архетипов, таких как ’’клиенты” и ’’учителя”,
чтобы лучше организовать ваш код на основе методов ООП.
Глава 7 охватывает некоторые из более полезных API-интерфейсов WordPress и
вспомогательных функций, которые не вписываются в остальную часть книги, но
все еще важны для разработчиков, создающих веб-приложения с помощью WordPress.
Глава 8 содержит все сведения о защите ваших приложений WordPress, плагинов и
тем.

Глава 9 охватывает использование JavaScript и Ajax в вашем приложении WordPress. Мы расскажем о правильном способе включения JavaScript в WordPress и о
том, как создать асинхронное поведение в вашем приложении.
Глава 10 рассказывает о REST API для WordPress и о том, как применить его для
интеграции WordPress с внешними приложениями.
Глава 11 посвящена описанию редактора блоков и созданию своих собственных
блоков.

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

Глава 13 описывает локализацию ваших плагинов и тем для WordPress, в том числе
вопрос, как подготовить код для перевода и как создавать и использовать файлы
перевода.
Глава 14 раскрывает, как оптимизировать и масштабировать WordPress для боль­
ших веб-приложений. Мы рассмотрим, как проверить производительность вашего
приложения WordPress и укажем наиболее популярные методы ускорения и мас­
штабирования сайтов под управлением WordPress.
Глава 15 посвящена созданию приложения для интернет-торговли. Мы рассмотрим
различные типы доступных плагинов для электронной коммерции и способы выбо­
ра между ними. Затем мы подробно опишем, как с помощью WordPress можно об­
рабатывать платежи и управлять учетными записями веб-приложения SaaS (soft­
ware as a service).
Глава 16 раскрывает, как использовать WordPress для запуска собственных прило­
жений на мобильных устройствах, создавая оболочки приложений для iOS и An­
droid.

Глава 17 описывает некоторые сторонние библиотеки РНР, службы и API, которые
часто встречаются в веб-приложениях, а также способы их интеграции с WordPress,
включая полную миграцию.
Предисловие

|

19

Глава 18 предсказывает будущее WordPress, описывает, какие приложения мы
ожидаем увидеть на WordPress, какие обновления мы ожидаем для WordPress,
а также на какие инструменты и платформы следует обратить внимание в будущем.

О коде программ
Все примеры из этой книги вы можете найти по адресу github.com/bwawwp. Обра­
тите внимание, что эти примеры кода были написаны для того, чтобы наиболее
четко передать концепции, которые мы рассмотрим в книге. Чтобы улучшить удо­
бочитаемость листингов программ, мы часто игнорируем лучшие практики стан­
дартов программирования (oreiI.ly/xw3dV), безопасность и локализацию (которые
мы рассмотрим в главах 8 и 13) или не рассматриваем некоторые особые случаи.
Вы должны иметь это в виду, прежде чем использовать какие-либо примеры в сво­
ем рабочем коде.

Образец приложения SchoolPress доступен по адресу schoolpress.me, с открытым
исходным кодом для этого сайта по адресу oreil.ly/6Lbax.

Условные обозначения
В этой книге приняты следующие обозначения:

Курсивный шрифт — указывает на новые термины, имена файлов и расширения
файлов.
Полужирный шрифт — им оформлены URL-адреса и адреса электронной почты,

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

Полужирный моноширинный шрифт — указывает на команды или другой текст, который
должен быть набран пользователем.

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

Данный элемент обозначает примечание или замечание.

Данный элемент обозначает предупреждение или предостережение.

20

|

Предисловие

Использование примеров программного кода
Как было указано в разделе ”0 коде программ”, все примеры программного кода в
этой книге можно найти по адресу github.com/bwawwp .
Если у вас появится технический вопрос или проблема с использованием примеров
кода, отправьте электронное письмо по адресу bookquestions@oreilly.com .
Эта книга призвана помочь вам выполнить свою работу. В общем случае, если
пример кода приведен в книге, то вы можете вставить его в свои программы и до­
кументацию. Вам не нужно обращаться к нам за разрешением, если вы не воспро­
изводите значительную часть листинга программы. Например, написание програм­
мы, которая содержит несколько фрагментов кода из этой книги, не требует разре­
шения. Для продажи или распространения примеров из книг O'Reilly потребуется
разрешение. Чтобы ответить на какой-либо вопрос, сославшись на эту книгу и при­
ведя пример кода, разрешения не нужно. Включение значительного объема кода
программ из этой книги в документацию вашего продукта требует разрешения.

Для нас важно, если при ссылке вы укажете атрибуты издания, но мы этого не тре­
буем. Атрибуты обычно включают название книги, автора, издателя и ISBN. На­
пример: "Создание веб-приложений с WordPress, второе издание, Брайан Мессенленер и Джейсон Коулман (O'Reilly). Все права принадлежат Брайану Мессенленеру и Джейсону Коулману, 978-1-491-99008-7 2020."

Если вы считаете, что использование примеров кода требует разрешения, свяжи­
тесь с нами по адресу permissions@oreilly.com .

Предисловие

|

21

Благодарности

От Брайана: спасибо Джейсону Коулману и Мэтту Мулленвегу, я не смог бы на­
писать эту книгу без их помощи! Особая благодарность Алисии Янг за то, что она
остается в курсе событий в O’Reilly Media. Выражаю также благодарность нашим
техническим экспертам за то, что все в книге является верным. Спасибо Скотту Болинжеру из AppPresser.com и Джеффу Уорлею из AlphaWeb.com за то, что терпели
меня. Привет семье и друзьям, которые всегда были рядом со мной и никогда не
переставали верить в меня. Больше всего я благодарен своим детям: Дали, Брайанумладшему, Нине, Кэму и Акселю Мессенленерам — они дают мне цель, и без них
я, вероятно, даже не знал бы, что такое WordPress.
От Джейсона: спасибо моему соавтору Брайану за то, что он попросил меня напи­
сать эту книгу вместе с ним. Спасибо нашим первым редакторам Меган и Аллисон
за то, что они следили за нами и помогали нам оставаться верными нашему перво­
начальному видению. Спасибо Алисии Янг за редактирование второго издания
этой книги и за всю проделанную работу с нашими объяснениями ”WP Drama”.
Выражаю благодарность всем замечательным техническим редакторам, которые
были у нас в обеих редакциях книги: Сэм Хотчкисс, Питер Макинтайр, Пиппин
Уильямсон, Джон Джеймс Джейкоби и Эндрю Лима. Спасибо Фредерику Таунсу за
его отзывы и вклад в нашу главу по оптимизации и масштабированию. Спасибо
Крису Леме за замечательный перевод этой книги, его отзывы о книге и советы в
целом. Благодарю всех в сообществе WordPress, кто ответил на все мои случайные
твиты и, возможно, знал или не знал, что они помогает мне написать эту книгу.
Спасибо моей жене, Ким, за то, что она поддержала меня, как всегда, во время еще
одного приключения в нашей жизни. Спасибо моей дочери Марин за то, что она
скучала по мне, когда я отсутствовал, чтобы писать, и моему сыну, Исааку, за то,
что постоянно спрашивал меня, ’’закончил ли я уже книгу”. И последнее, но не ме­
нее важное — спасибо моей семье, которая всегда поддерживала меня во время на­
писания книги: мама, папа, Джереми и Нана Мэн с нетерпением ждут, когда станут
первыми непрограммистами, прочитавшими эту книгу.

23

ГЛАВА 1

Создание веб-приложений
с помощью WordPress
Эта книга поможет вам создать что угодно с помощью WordPress: веб-сайты, темы,
платины, веб-сервисы и веб-приложения. Мы решили сосредоточиться на веб­
приложениях, потому что вы можете рассматривать их как супер-сайты, исполь­
зующие все методы, которые мы опишем.
Многие считают, что WordPress недостаточно мощен или не предназначен для соз­
дания веб-приложений; далее мы еще вернемся к этому вопросу. Мы много лет
создавали веб-приложения на WordPress и знаем, что с его помощью вы можете
создавать масштабируемые приложения.

В этой главе мы начнем с определения того, что такое веб-приложение, а затем вы­
ясним, почему WordPress является отличным фреймворком для их создания. Мы
также опишем некоторые ситуации, в которых применение WordPress не будет
лучшим способом для создания вашего веб-приложения.

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

Что такое приложение?
Нам нравится определение в Википедии (oreil.ly/2DUKl): "Прикладное программ­
ное обеспечение (сокращенно приложение) — это программное обеспечение, пред­
назначенное для выполнения группы скоординированных функций, задач или дей­
ствий на благо пользователя".

Что такое веб-приложение?
Веб-приложение — это всего лишь приложение, запускаемое через веб-браузер.

Обратите внимание, что в некоторых веб-приложениях технология браузера скры­
та, например, когда вы интегрируете веб-приложение в собственное приложение
для Android или iOS, запускаете веб-сайт как приложение в Google Chrome или ак­
тивизируете приложение с помощью Adobe AIR. Однако внутри этих приложений
по-прежнему существует система парсинга HTML, CSS и JavaScript.
25

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

Мы можем лишь объяснить некоторые функции веб-приложения, дать вам не­
сколько примеров, а затем попытаться придумать сокращенное определение, чтобы
вы в целом понимали, о чем мы говорим, когда употребляем этот термин в книге.
При чтении этой книги вам встретятся ссылки на SchoolPress. SchoolPress — это
веб-приложение, которое мы создаем, чтобы помочь школам и преподавателям
управлять своими учениками и учебными программами. Все примеры кода направ­
лены на функциональность, которая может существовать в SchoolPress. Более
подробно об общей концепции SchoolPress мы поговорим далее в этой главе.

Функции веб-приложения
Далее перечислены некоторые функции, обычно связанные с веб-приложениями и
приложениями в целом. Чем больше этих функций есть на веб-сайте, тем целесооб­
разнее считать его веб-приложением*.
♦ Интерактивные элементы

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

Веб-сайты с формами предлагают функционал совершения транзакций. Приме­
ром может служить форма обратной связи на веб-сайте или форма заявки на
странице вакансий на веб-сайте компании. Формы позволяют пользователям
взаимодействовать с сайтом, используя нечто большее, чем клик.
Веб-приложения будут иметь еще больше элементов интерактивного
пользовательского интерфейса (UI — user interface). Примеры включают в себя
панели инструментов, элементы перетаскивания, редакторы форматированного
текста и ползунки.
♦ Задачи, а не содержание
Помните, что веб-приложения ’’разработаны, чтобы помочь пользователю вы­
полнять определенные задачи”. Пользователи Google Maps получают маршруты
проезда. Пользователи Gmail пишут электронные письма. Пользователи Trello
управляют списками. Пользователи SchoolPress добавляют комментарии по теме
урока.

Некоторые приложения по-прежнему ориентированы на контент. Типичный се­
анс Facebook или Twitter почти на 90% состоит из чтения. Тем не менее сами

’ На многие идеи в этом разделе повлияли сообщения в блоге: ’’Что такое веб-приложение?” Домини­
ка Хазаэль-Массо (bitly/wiawa) и Боба Бэксли (bit.ly/wiawa2).

26

|

Гпава 1

приложения представляют способ просмотра контента, отличный от обычного
просмотра веб-страниц.

♦ Логины
Вход в систему и учетные записи позволяют веб-приложению сохранять инфор­
мацию о своих пользователях. Эта информация предназначена для облегчения
основных задач приложения и обеспечения постоянного взаимодействия. При
входе в систему пользователи SchoolPress могут видеть, какие сообщения явля­
ются непрочитанными. У них также есть имя пользователя, которое идентифи­
цирует их деятельность в приложении.
Веб-приложения также могут иметь уровни пользователей. В SchoolPress бу­
дут администраторы, контролирующие внутреннюю работу приложения, учи­
теля, управляющие процессом обучения и ученики, участвующие в дискуссиях
в классе.

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

♦ Работа в автономном режиме

Всегда, когда это возможно, желательно, чтобы ваши веб-приложения работали
в автономном режиме. Конечно, интерактивность Интернета главным образом
определяет "веб" часть веб-приложения, но сайт, который все еще работает, ко­
гда вы проезжаете через туннель, будет больше походить на приложение.
С Gmail вы можете создавать черновики писем в автономном режиме. Evemote
позволяет создавать заметки офлайн, а затем синхронизировать их с Интернетом
после восстановления подключения.
♦ Мэшапы
Веб-приложения могут связывать одно или несколько веб-приложений вместе.
Веб-приложение может использовать различные веб-сервисы и API для переда­
чи и извлечения данных. У вас может быть веб-приложение, которое получает
информацию о местоположении, такую как долгота и широта, из Twitter и от­
правлять и отмечать его на карте Google Мар.

Мобильные приложения
С тех пор, как первое издание этой книги было опубликовано еще в 2012 году,
веб-приложения, в частности мобильные приложения, получили широкое распро­
странение. На большинстве веб-сайтов мобильные устройства уже преобладают

Создание веб-приложений с помощью WordPress

|

27

над ПК и являются крупнейшим источником трафика (Источник: Perficient, Inc.
(oreil.ly/N92kX)).
В 2012 году типичное веб-приложение выглядело как Basecamp— менеджер про­
ектов, доступ к которому осуществлялся через веб-браузер на вашем компьютере.
В 2019 году типичное веб-приложение выглядит как Twitter— приложение для
коммуникации, доступ к которому можно получить с помощью телефона iOS или
Android.

Поскольку в большинстве случаев многие из пользователей будут получать доступ
к вашим веб-сайтам и приложениям на мобильном устройстве, при разработке веб­
приложений мы придерживаемся взгляда ’’прежде всего для мобильных устройств”.
О том, как заставить ваши приложения WordPress работать на мобильных устрой­
ствах, речь пойдет в главе 16. А об основах адаптивного дизайна и о том, как заста­
вить ваши веб-сайты правильно отображаться на экранах любого размера мы рас­
скажем в главе 4.

Прогрессивные веб-приложения
Прогрессивные веб-приложения (PWA) — это веб-сайты, реализующие преимуще­
ства современных функций браузера, которые ведут себя как собственные прило­
жения для Android, iOS или ПК. В частности, веб-сайты, которые используют
сервис-воркеры (service workers) для работы в автономном режиме, содержат файл
манифеста веб-приложения для определения приложения в операционной системе
(ОС) и отвечают нескольким другим требованиям, поэтому могут быть запущены
как приложения прямо из браузера.
Идея PWA была разработана командой Google Chrome, но теперь поддерживается
на iOS и в большинстве современных веб-браузеров. Плагин для поддержки PWA
(oreil.ly/gThAQ) разрабатывается для работы основных функций PWA в WordPress
core. С помощью этого плагина вы можете превратить ваш сайт WordPress в PWA,
и это хорошая идея. Но на самом деле создание PWA — это скорее образ мышле­
ния, а не простой переход. Аналогично ’’функциям веб-приложения”, которые мы
только что описали, главный сайт PWA Google (oreil.ly/FAwTK) содержит кон­
трольный список функций, необходимых в большинстве PWA (oreil.ly/HBuTg).
Укажем следующие базовые функции:

♦ Сайт обслуживается по HTTPS.

♦ Страницы адаптированы для планшетов и мобильных устройств.
♦ Все URL-адреса приложения загружаются в автономном режиме.
♦ Метаданные предоставляются для добавления на главный экран.

♦ Первая загрузка быстрая даже с 3G.

♦ Сайт работает независимо от браузера.
♦ Переход между страницами не ощущается как работа с сетью.

♦ У каждой страницы есть URL.

28

|

Гпава 1

В дополнение к базовым функциям есть контрольный список элементов для ’’при­
мерных” PWA, который охватывает пользовательский опыт (UX) и производитель­
ность. Инструмент Google Lighthouse (oreil.ly/GwEkb) предоставляет автоматизи­
рованные тесты и отчеты для соответствия критериям PWA. Даже разработчики
полностью нативных приложений или приложений для браузера, могут воспользо­
ваться некоторыми советами из контрольных списков PWA и отчетов Lighthouse.

Зачем нужен WordPress?
Ни один язык программирования или программный инструмент не подойдет для
любой разработки. Мы еще коснемся вопроса, почему вы не захотите использовать
WordPress, но сейчас давайте рассмотрим некоторые ситуации, в которых создавать
веб-приложения целесообразно именно с помощью WordPress.

Вы уже используете WordPress
Если вы уже используете WordPress для своего основного сайта, то можете просто
добавить плагин, который вам необходим. В WordPress есть отличные плагины для
электронной торговли (WooCommerce), форумов (bbPress), сайтов с подпиской
(Paid Memberships Pro), функций социальных сетей (BuddyPress) и геймификации
(BadgeOS).
Встраивание приложения в существующий сайт WordPress сэкономит ваше время и
упростит работу для ваших пользователей. Итак, если ваше приложение достаточно
простое, вы можете создать собственный плагин на своем сайте WordPress для про­
граммирования функциональности вашего веб-приложения.
Когда вы довольны своим сайтом на WordPress, не поддавайтесь искушению, если
люди говорят, что вам нужно перейти на что-то другое, чтобы добавить определен­
ные функции на ваш сайт. Это, скорее всего, неправда. Вам не нужно выбрасывать
всю работу, которую вы уже проделали в WordPress, и последующие доводы — это
веские причины придерживаться WordPress.

С помощью WordPress легко управлять контентом
Разработанный сначала как платформа для ведения блогов, с введением
пользовательских типов записей (англ. СРТ — Custom Post Туре) в версии 3.0
WordPress развился в полностью функциональную систему управления контентом
(англ. CMS — Content Management System). Любая страница или сообщение может
быть отредактировано администратором через панель инструментов, доступ к ко­
торой можно получить через ваш веб-браузер. О работе с СРТ вы узнаете в главе 5.
WordPress упрощает добавление и редактирование контента с помощью редактора
WYSIWYG (What You See Is What You Get— ’’Что видишь, то и получаешь”), по­
этому вам не нужно привлекать веб-дизайнеров каждый раз, когда вы хотите вне­
сти простые изменения в свой сайт. Вы также можете создавать собственные меню
и элементы навигации для своего сайта, не касаясь программного кода.
Создание веб-приложений с помощью WordPress

|

29

Если ваше веб-приложение сфокусировано на фрагментах контента (например, на­
ше приложение SchoolPress ориентировано на назначение пользователям заданий и
их обсуждение), API пользовательских типов постов для WordPress (описанный в
главе 5) позволяет легко настроить этот пользовательский контент и управлять им.

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

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

Вы можете использовать плагины, такие как Paid Memberships Pro, чтобы расши­
рить встроенное управление пользователями и назначать членов разных уровней и
контролировать доступ пользователей к контенту. Например, вы можете создать
уровень, чтобы предоставить участникам с платным аккаунтом доступ к премиумконтенту на вашем сайте WordPress.

Плагины
В репозитории WordPress (wordpress.org/plugins/ ) имеется более 55 тыс. бесплат­
ных плагинов. Существует множество дополнительных плагинов, как бесплатных,
так и коммерческих, на различных сайтах в Интернете. Если у вас появляется идея
для расширения вашего сайта, велика вероятность, что для этого уже есть плагин,
который сэкономит ваше время и деньги.

Существует несколько необходимых плагинов, которые мы задействуем практиче­
ски на каждом создаваемом нами сайте и веб-приложении.
Для большинства разрабатываемых веб-сайтов вы, наверное, хотите кэшировать
вывод для ускорения просмотра, использовать такие инструменты, как Google Ana­
lytics для отслеживания посетителей, создавать карты сайта и настраивать набор
страниц для поисковой оптимизации (англ. SEO — Search Engine Optimization), а так­
же выполнять ряд других общих задач.
Есть много хорошо поддерживаемых плагинов для всех этих функций. Мы предла­
гаем наши любимые в этой книге. Вы можете найти их список на веб-сайте этой
книги (bwawwp.com/plugins/).
30

|

Гпава 1

Гибкость важна
WordPress — полноценный фреймворк, способный на многое. Кроме того, WordPress построен на основе технологий PHP, JavaScript и MySQL, поэтому все, что вы
можете встроить в PHP/MySQL (а это почти все), может быть достаточно легко
встроено в ваше приложение WordPress.
WordPress и PHP/MySQL в целом не идеально подходят для любой задачи, но они
пригодны для широкого круга задач. Наличие одной платформы, которая будет
расти вместе с вашим бизнесом, позволит вам быстрее выполнять задачи и пере­
страиваться. Например, вот типичный пример сайта запуска стартапа Lean, рабо­
тающего на WordPress:
♦ Объявите о своем стартапе с помощью одностраничного сайта.

♦ Добавьте форму для сбора адресов электронной почты.
♦ Добавить блог.
♦ Сосредоточьтесь на SEO и оптимизируйте весь контент.
♦ Отправляйте посты блога в Twitter и Facebook.
♦ Добавьте форумы.
♦ Используйте плагин Paid Memberships Pro, чтобы позволить участникам платить
за доступ.

♦ Добавьте пользовательские формы, инструменты и поведение приложения для
участников с платной подпиской.
♦ Обновите пользовательский интерфейс, используя JavaScript и фреймворки.
♦ Настройте сайт и сервер для масштабирования.
♦ Локализуйте сайт/приложение для разных стран и языков.

♦ Добавьте поддержку Progressive Web Арр.
♦ Запустите обертки для iOS и Android для приложения.
Суть, почему нужно идти по этому пути, состоит в том, что на каждом этапе у вас
есть одна и та же база данных пользователей и одна и та же платформа разра­
ботки.

Частые обновления безопасности
Тот факт, что WordPress используется на миллионах сайтов, делает его целью хаке­
ров, пытающихся найти уязвимости в его безопасности. Некоторые из этих хакеров
были успешны в прошлом, однако разработчики WordPress быстро отслеживают
уязвимости и выпускают обновления для их устранения. Получается, будто мил­
лионы людей постоянно тестируют и исправляют ваше программное обеспечение.
Базовая архитектура WordPress делает применение этих обновлений быстрым и
безболезненным процессом, который могут выполнять даже начинающие веб-

Создание веб-приложений с помощью WordPress

|

31

пользователи. Если вы хорошо знаете, как настроить WordPress и обновить его до
последних версий, когда они станут доступны, WordPress станет гораздо более
безопасной платформой для вашего сайта, чем все остальное. Мы обсудим безо­
пасность более подробно в главе 8,

Стоимость
WordPress — бесплатный продукт. РНР бесплатен. MySQL бесплатен. Большинство
плагинов тоже бесплатны.
Серверы и хостинг стоят денег, но в зависимости от того, насколько велико ваше
веб-приложение и сколько трафика вы получаете, это может быть относительно
недорого. Если вам требуются пользовательские функции, которых нет ни в одном
из существующих плагинов, вам, возможно, придется заплатить разработчику за
создание нового. Или, если вы сами разработчик, это будет стоить вам времени.

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

WordPress подходит только для блогов
Многие люди считают, что поскольку WordPress впервые был создан для ведения
блога, он хорош только для этой цели.
Подобные заявления были верны несколько лет назад, но с тех пор WordPress вне­
дрил мощную функциональность CMS, что делает его полезным для других сайтов,
ориентированных на контент. WordPress в настоящее время является самой попу­
лярной из используемых CMS с долей рынка более 60%2. На рис. 1.1 показан слайд
из презентации Мэтта Мулленвега ’’Состояние WordPress” с конференции WordCamp San Francisco 2013. Перевернутая пирамида слева изображает WordPress 2006
года, где большая часть кода посвящена приложению блога, и есть немного кода
CMS и платформы, на котором она держится. Правая пирамида представляет теку­
щее состояние платформы WordPress, где большая часть кода находится в самой
платформе, поверх которой расположен слой CMS, а поверх уровня CMS — при­
ложение для блога. Сейчас WordPress является гораздо более устойчивой платфор­
мой, чем несколько лет назад.

2 W3Tech (bit.ly/w3techs) регулярно проводит исследования по использованию различных систем
управления контентом.

32

|

Гпава 1

Рис. 1.1. Диаграммы из презентации Мэтта Мулленвега "Состояние WordPress" 2013 год
WordPress не всегда был таким устойчивым

С помощью API пользовательских типов записей можно настроить установку
WordPress для поддержки других типов контента, кроме постов или страниц блога.
Мы подробно рассмотрим это в главе 5.

WordPress предназначен только сайтов,
ориентированных на контент
Подобно людям с позицией ’’только для блогов”, некоторые скажут, что WordPress
предназначен только для управления контентом сайтов.
Во-первых, даже если бы WordPress был применим только к контентным сайтам и
приложениям, на него приходилось бы большое количество приложений. Главный
экран вашего телефона, вероятно, содержит множество приложений, основанных
на контенте, таких как Netflix, Twitter, Facebook, Reddit и Evemote. Это очень попу­
лярные приложения, поддерживаемые гигантскими компаниями. Сейчас мы не го­
ворим, что эти приложения работают на WordPress, но мы предполагаем, что мож­
но создать приложение, похожее на это, с использованием WordPress в качестве
фреймворка.
Во-вторых, как мы подробно рассмотрим в этой книге, WordPress — это отличная
платформа для создания более интерактивных веб-приложений. Основной функци­
ей, позволяющей выбрать WordPress в качестве основы, является API плагинов, ко­
торый позволяет вам понять, как работает WordPress по умолчанию, и что-то изме­
нить. Вам доступны не только тысячи плагинов в репозитории WordPress и других
местах в Интернете, API плагинов позволяет вам написать собственные пользова­
тельские плагины, чтобы WordPress делал что угодно с помощью PHP/MySQL.

WordPress не масштабируется
Некоторые из людей, которые так говорят, будут указывать на установку WordPress
по умолчанию, работающую на хостинге нижнего уровня, и они отмечают, как сайт
замедляется или ’’падает” при большой нагрузке, и, таким образом, приходят к вы­
воду, что WordPress не масштабируется.
Или, может быть, когда мы предложили вам создать сайт, такой как Facebook, с ис­
пользованием WordPress, вы справедливо насмехались над этой идеей.

Если вы намереваетесь создать приложение в масштабе Facebook, эта книга не
для вас. Спросите своего технического директора, какая часть их бюджета в мил­
лиард долларов выделена вашему приложению и каких инженеров вам нужно пе­
реманить из Google и Amazon, чтобы создать собственное решение.

Создание веб-приложений с помощью WordPress

|

33

В действительности многие сайты с большим трафиком работают на WordPress.
WordPress.com работает на том же базовом программном обеспечении, что и любой
сайт WordPress, и является одним из самых популярных сайтов в мире.
По мере расширения вашего приложения вам необходимо будет обновлять и заме­
нять отдельные компоненты, чтобы соответствовать новому масштабу. Проблемы с
масштабированием WordPress такие же, как и при масштабировании любого при­
ложения: кэширование страниц и данных, более быстрая обработка вызовов базы
данных и повышение производительности сети. Крупные сайты, такие как WordPress.com, TechCrunch и блог New York Times, стали использовать WordPress. Точно
так же большинство уроков по масштабированию приложений PHP/MySQL в це­
лом применимы и к WordPress. Мы подробно расскажем о масштабировании при­
ложений WordPress в главе 14.

WordPress небезопасен
Как и для любого продукта с открытым исходным кодом, при использовании
WordPress есть компромисс в отношении безопасности.
С одной стороны, поскольку WordPress очень популярен, он часто становится це­
лью хакеров, ищущих уязвимости безопасности. А поскольку исходный код откры­
тый, уязвимости будет легче обнаружить.

С другой стороны, поскольку WordPress является продуктом с открытым исходным
кодом, вы узнаете, если эксплойты станут общедоступными, и кто-то другой, веро­
ятно, выпустит исправление для вас.
Мы чувствуем себя более уверенно, зная, что есть множество людей, пытающихся
использовать WordPress, и столько же людей, которые работают над тем, чтобы
защитить WordPress от взломов. Мы не верим в ’’безопасность через неизвест­
ность”, если только в качестве дополнительной меры. Мы бы предпочли, чтобы
дыры в безопасности нашего программного обеспечения появлялись открыто, а не
оставались незамеченными до самого худшего момента.

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

Плагины WordPress ужасны
API плагинов в WordPress и тысячи плагинов, которые были разработаны с его ис­
пользованием, являются ’’секретным соусом” и, по нашему мнению, основной при­
чиной того, что WordPress стал настолько популярным и настолько успешным в
качестве веб-платформы.

Некоторые люди скажут: ’’Конечно, есть тысячи плагинов, но они все ужасны”. Ну
да, некоторые из плагинов действительно не очень полезны.
Но есть много плагинов, которые определенно не являются чепухой, например
AppPresser, разработанный одним из авторов этой книги Брайаном Мессенленером.
Если вам нравится WordPress для управления своим письменным контентом или

34

|

Гпава 1

интернет-магазином, то плагин и платформа AppPresser — вот самый быстрый спо­
соб получить данный контент или сохранить в мобильном приложении.
Плагин Paid Memberships Pro, разработанный другим автором Джейсоном Коулма­
ном, тоже хорош. Использование Paid Memberships Pro для управления биллингом
и участниками позволит вам сосредоточить усилия по разработке на основной
функциональности вашего приложения, а не на том, как интегрировать ваш сайт с
платежной системой.
Многие плагины делают что-то очень простое (например, скрывают панель адми­
нистратора от обычных пользователей), работают именно так, как рекламируется,
и на самом деле вовсе не ужасны.

Темы и плагины, найденные в репозитории WordPress.org, тщательно проверяются
сообществом на предмет безопасности и качества кода. Общеизвестно, что обзор на
темы WordPress.org (oreil.ly/WgTyD) более строгий и всеобъемлющий, чем в дру­
гих платформах. Проект Tide (oreil.ly/iR94e?) работает над добавлением автомати­
ческих тестов для плагинов и репозиториев тем, что приведет к увеличению каче­
ства плагинов и обновлений, а также позволит обнаружить проблемы совместимо­
сти и безопасности быстрее.
Даже дрянные плагины можно исправить, переписать или заимствовать для улуч­
шения их работы. Иногда проще переписать плохой плагин, чем исправлять его.
Однако в данном случае вы окажетесь все же на шаг ближе к цели, чем при написа­
нии с нуля.

Никто не заставляет вас использовать плагины WordPress, не проверяя их само­
стоятельно. Если вы создаете серьезное веб-приложение, то должны самостоятель­
но проверить код плагина, исправить его в соответствии со своими стандартами и
продолжить разработку.

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

Вы планируете лицензировать
или продавать технологию своего сайта
WordPress использует Общедоступную лицензию GNU версии 2 (GPLv2), которая
содержит ограничения на то, как вы распространяете программное обеспечение,
созданное с его помощью. А именно, вы не можете ограничивать то, что люди
делают с вашим программным обеспечением, когда вы продаете или распростра­
няете его.
Это сложная тема, но основная идея заключается в том, что если вы продаете толь­
ко свое приложение или предоставляете доступ к нему, то вам не нужно беспоко-

Создание веб-приложений с помощью WordPress

|

35

иться о GPLv2. Однако если вы продаете или распространяете исходный код ваше­
го приложения, то GPLv2 будет применяться к распространяемому вами коду.
Например, если мы размещаем SchoolPress на наших собственных серверах и про­
даем учетные записи для доступа к приложению, это не считается распространени­
ем, a GPLv2 никак не влияет на наш бизнес.

Но если мы захотим разрешить школамустанавливать программное обеспечение
для запуска на своих собственных серверах, то нам необходимо предоставить им
исходный код. Это будет считаться актом распространения. Наши клиенты смогут
на законных основаниях бесплатно раздавать наш исходный код, даже если мы из­
начально взяли с них плату за программное обеспечение. Мы должны учитывать
лицензию GPLv2, которая не позволяет нам ограничивать то, что пользователи де­
лают с кодом после его загрузки.

Имеется другая платформа,
которая приведет вас к цели быстрее
Если у вас есть команда опытных разработчиков Ruby, то целесообразно созда­
вать веб-приложение именно на Ruby. Если есть платформа, фреймворк или па­
кет, включающий 80% функций Ruby, необходимых для вашего веб-приложения,
и WordPress не имеет ничего подобного, то вам, вероятно, следует предпочесть
эту другую платформу.

Гибкость не важна для вас
Одна из главных особенностей сайта WordPress— возможность быстрой замены
частей сайта в соответствии с вашими потребностями. Например, если "лайки”
Facebook перестали приносить трафик, вы можете удалить плагин Facebook Connect
и установить плагин для Pinterest.
Как правило, обновление вашей темы или замена плагинов на сайте WordPress бу­
дет быстрее, чем разработка функций с нуля на другой платформе. Однако в тех
случаях, когда оптимизация и производительность важнее, чем возможность быст­
рого обновления приложения, лучшим выбором будет программирование нативно­
го приложения или программирование прямо на РНР.

Если ваше приложение служит для выполнения одной простой задачи, то вы, ско­
рее всего, захотите построить его на более низком уровне. Например, сервер лицен­
зий Paid Memberships Pro представляет собой один файл JSON с дополнительной
информацией и небольшим скриптом для проверки лицензионных ключей и дос­
тавки сжатых файлов. Джейсон создал этот сервер лицензий на РНР с большим
объемом кэширования. Сервер лицензий функционирует на DigitalOcean Sroplet за
10 долларов в месяц и обслуживает более 80 тыс. сайтов, работающих под управле­
нием Paid Memberships Pro.

Точно так же, если у вас есть ресурсы масштаба Facebook, то вы можете позволить
себе создавать все вручную и использовать собственные компиляторы PHP-to-C и
36

|

Гпава 1

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

Ваше приложение должно работать
в режиме реального времени
Одним из потенциальных недостатков WordPress, о котором мы поговорим позже,
является его зависимость от типичной архитектуры веб-сервера. В стандартной на­
стройке WordPress пользователь посещает URL-адрес, который связывается с веб­
сервером (например, Apache) по HTTP, запускает скрипт РНР для генерации стра­
ницы, а затем возвращает пользователю полную страницу.

Существуют способы улучшить производительность этой архитектуры с использо­
ванием методов кэширования и/или оптимизированных настроек сервера. Вы мо­
жете сделать WordPress асинхронным с помощью вызовов Ajax или доступа к базе
данных с помощью альтернативных клиентов. Однако если ваше приложение
должно работать в режиме реального времени и быть полностью асинхронным (на­
пример, приложение, похожее на чат, или многопользовательская игра), мы совету­
ем хорошенько подумать, подойдет ли вам WordPress.
Многие разработчики WordPress, включая Мэтта Мулленвега, основателя и духов­
ного лидера WordPress, понимают это ограничение. Все больше функциональности
WordPress переносится в JavaScript, где вычисления могут быть перенесены в брау­
зер, а фреймворки, такие как REACT, позволяют создавать высокоинтерактивные
события. Новый редактор Gutenberg, добавленный в WordPress 5.0, является луч­
шим примером этого шага и свидетельствует о грядущих событиях. Но в данный
момент вы столкнетесь с трудностями, пытаясь заставить WordPress работать асин­
хронно с той же производительностью, что и нативное приложение или что-то пол­
ностью построенное на Node.js либо других технологиях, специально предназна­
ченных для приложений реального времени.

WordPress как фреймворк
Системы управления контентом, такие как WordPress, Drupal и Joomla, часто оста­
ются вне обсуждения фреймворков, но на самом деле WordPress (в частности) дей­
ствительно отлично подходит для того, для чего предназначены фреймворки: для
быстрого создания приложений.
В течение нескольких минут вы можете настроить WordPress и получить полно­
функциональное приложение с регистрацией пользователей, управлением сеанса­
ми, управлением контентом и панелью для мониторинга активности сайта.

Различные API, общие объекты и вспомогательные функции, описанные в этой
книге, позволяют быстрее программировать сложные приложения, не беспокоясь
об интеграции систем более низкого уровня.

На рис. 1.2 показан правый треугольник из презентации Мэтта Мулленвега "Сос­
тояние WordPress" 2013 года, изображающий устойчивую платформу WordPress со
Создание веб-приложений с помощью WordPress

|

37

слоем CMS, находящимся сверху, и приложение для ведения блогов, построенное
поверх слоя CMS.

Рис. 1.2. Платформа WordPress

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

WordPress и фреймворки Framework-View-Controller
Модель-представление-контроллер (MVC — Model-View-Controller) — это общий
шаблон проектирования, присутствующий во многих средах разработки программ­
ного обеспечения. Основные преимущества архитектуры MVC — повторное ис­
пользование кода и разделение задач (SoC — Separation of Concerns). WordPress не
задействует архитектуру MVC, но по-своему реализует повторное использование
кода и SoC.

Здесь мы кратко расскажем об архитектуре MVC и о том, как она влияет на процесс
разработки в WordPress. Если вы знакомы с основами MVC, этот раздел должен
помочь вам понять, как подходить к разработке на WordPress аналогичным обра­
зом. На рис. 1.3 приведено типичное приложение на основе MVC. Конечный поль­
зователь использует контроллер, манипулирующий состоянием приложения и дан­
ными через модель, которая затем обновляет представление, отображаемое пользо­
вателю. Например, в приложении блога пользователь может просматривать
страницу последних сообщений (представление). Пользователь щелкает заголовок
сообщения, осуществляя переход к новому URL (контроллеру), который загрузит
данные поста (в модель) и отобразит один пост (другое представление).

Рис. 1.3. Как работает MVC

38

|

Гпава 1

Архитектура MVC поддерживает повторное использование кода, позволяя моде­
лям, представлениям и контроллерам взаимодействовать. Например, и представле­
ние последних сообщений, и представление отдельных сообщений могут задейст­
вовать одну и ту же модель публикации при отображении данных публикации. Од­
ни и те же модели могут служить в веб-интерфейсе для отображения сообщений и в
бэкенде — для их редактирования. Архитектура MVC поддерживает SoC, позволяя
дизайнерам сосредоточить свое внимание на представлениях, а программистам —
на моделях.

Вы можете попробовать применить архитектуру MVC в WordPress. Есть целый ряд
проектов, которые помогут вам сделать это. Однако мы считаем, что попытка при­
вязать MVC к WordPress может привести к проблемам, если ядро WordPress не бу­
дет официально поддерживать MVC. Вместо этого мы предлагаем следовать
"WordPress Way", как описано в этой книге.
Тем не менее, если вам интересно, WP MVC плагин (bit.ly/wp-mvc) находится в
активной разработке и помогает вам на основе MVC Framework создавать плагины
WordPress. Если вы не хотите или вам не нужен полный MVC, есть несколько спо­
собов привязать процесс MVC к WordPress.

Модели = плагины
В среде MVC код, который хранит базовые структуры данных и логику работы,
находится в моделях. Именно здесь программисты будут проводить большую часть
своего времени.
В WordPress плагины являются подходящим местом для хранения новых структур
данных, сложной бизнес-логики и пользовательских определений типов записей.

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

Один из способов сделать SoC более понятным при добавлении в ваши плагины
WordPress компонентов, отвечающих за дизайн,— создать папку templates или
pages и поместить в нее свой код внешнего интерфейса. Обычная практика — по­
зволить шаблонам (templates) переопределять шаблон, используемый плагином.
Например, при работе WordPress с плагином Paid Memberships Pro вы можете ско­
пировать папку с именем paid-memberships-pro/pages в папку с вашей активной те­
мой, чтобы переопределить шаблоны страниц по умолчанию. (Этот метод переоп­
ределения шаблонов плагинов описан в главе 4.)

Представления = темы
В MVC-фреймворке код для отображения данных пользователю записывается в
представлениях. Именно здесь дизайнеры и разработчики внешнего интерфейса
будут проводить большую часть своего времени.

Создание веб-приложений с помощью WordPress

|

39

В WordPress темы — это подходящее место для хранения шаблонного кода и логики.

Опять же, сравнение здесь не сопоставляется один к одному, но ’’views = themes” —
хорошая отправная точка.

Контроллер = загрузчик шаблонов
В инфраструктуре MVC код для обработки пользовательского ввода (в виде URLадресов или данных $get или $post) и определения того, какие модели и представ­
ления следует использовать для обработки запроса, хранится в контроллерах. Код
контроллера обычно обрабатывается программистом и часто устанавливается один
раз, а затем забывается. Программирование в приложении MVC происходит, по
сути, в моделях и представлениях. Несмотря на это, контроллеры являются важной
частью работы приложения.
В WordPress все запросы к страницам (если пользователи не обращаются к кэширо­
ванному файлу
обрабатываются с помощью файла index.php в соответствии
с иерархией шаблонов. Загрузчик шаблонов определяет, какой файл в шаблоне сле­
дует использовать для отображения страницы конечному пользователю. Например,
search.php — для отображения результатов поиска, single.php — для отображения
одного сообщения и т. д.

Поведение по умолчанию можно дополнительно настроить с помощью APIинтерфейса WP Rewrite (описанного в главе 7) и других хуков и фильтров. Инфор­
мацию об иерархии шаблонов (bit.ly/temp-hier) вы можете найти в справочнике по
WordPress. Мы более подробно рассмотрим иерархию шаблонов в главе 4.
Для лучшего понимания того, как работают фреймворки MVC, фреймворк PHP Yii
(bit.ly/yii-guide) содержит большой ресурс, объясняющий подробно, как лучше все­
го использовать его архитектуру MVC3.

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

Анатомия приложения WordPress
В данном разделе опишем приложение, которое мы создали как дополнение к этой
книге: SchoolPress. Мы расскажем о предполагаемой функциональности SchoolPress, о том, как оно работает, и кто будет им пользоваться, и, что наиболее важно
для этой книги, о том, как каждая часть приложения построена в WordPress.
Не беспокойтесь, если вы не понимаете некоторые из следующих терминов. В по­
следующих главах мы рассмотрим всю введенную здесь терминологию более под­
робно. Когда это возможно, мы указываем на главу, которая соответствует обсуж­
даемой функции.

3 Yii - PHP-фреймворк на основе MVC. Другие платформы РНР, такие как Laravel (laravel.com), более
популярны среди разработчиков WordPress и сообщества РНР в целом, но документация, связанная с
МУС, на сайте Yii особенно хорошо написана.

40

|

Гпава 1

В этой книге не ставилась задача "Как заново создать приложение SchoolPress" и
здесь вы не найдете пошагового руководства. Когда это имеет смысл, мы просто
1ссылаемся на SchoolPress в наших примерах кода в этой книге, поэтому вам не
ж нужно тратить время на понимание контекста каждого отдельного примера.

Что такое SchoolPress?
SchoolPress — это веб-приложение, которое позволяет учителям легко общаться со
своими учениками за пределами классной комнаты. Учителя могут создавать клас­
сы и приглашать в них своих учеников. В каждом классе есть форум для специаль­
ных обсуждений, а также более структурированная система для учителей, чтобы
публиковать задания и заставлять учащихся выполнять свою работу.
Рабочее приложение можно найти на веб-сайте SchoolPress (schoolpress.me).
Исходный код приложения размещен в репозитории SchoolPress GitHub
(oreil.Iy/Tt7PO/

SchoolPress работает
в многосайтовой сети WordPress
SchoolPress запускает многосайтовую версию WordPress. На главном сайте разме­
щены бесплатные аккаунты, где учителя могут зарегистрироваться и начать управ­
лять своими классами. В нем также есть вся маркетинговая информация для от­
дельных школьных сайтов в сети, включая страницу, на которой можно зарегист­
рироваться и проверить платную подписку.
Школы могут создать уникальный поддомен, в котором будут размещаться занятия
для учителей. Эта установка предлагает более точный контроль и отчетность для
всех классов школы. Подробности использования многосайтовой сети с WordPress
можно найти в главе 12.

Бизнес-модель SchoolPress
SchoolPress использует плагины Paid Memberships Pro, PMPro Register Helper и
PMPro Network для настройки процесса регистрации и приема платежей по кредит­
ной карте при регистрации школ.
Школы могут приобрести собственный уникальный поддомен за ежегодную плату.
Другие пользователи SchoolPress не платят за доступ. Когда школьные администра­
торы регистрируются, они могут указать название школы и сокращение для своего
поддомена .schoolpress.me. Для них создается новый сетевой сайт, и им
предоставляется доступ к оптимизированной версии панели управления WordPress
их сайта.
Затем администратор школы приглашает учителей в систему. Учителя также могут
запросить приглашение в школу, которое должно быть одобрено администрацией
школы. Учителя могут приглашать учеников в классы, которые они создают. Сту-

Создание веб-приложений с помощью WordPress

|

41

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

Учителя могут также бесплатно зарегистрироваться, чтобы создавать свои классы
по адресу schoolpress.те. Страницы, размещенные на поддомене, могут показывать
рекламу или использовать другие схемы монетизации. Подробности того, как на­
строить электронную торговлю с помощью WordPress, обсуждаются в главе 15.

Уровни участия и роли пользователей
Учителя получают уровень членства учителя (через Paid Memberships Pro) и специ­
альную роль под названием ’’Учитель”, которая дает им доступ к созданию и редак­
тированию своих классов, модерированию дискуссий на их форумах классов, а так­
же созданию и управлению назначениями для своих классов.
Учителя не имеют доступа к панели управления WordPress. Они формируют классы
и управляют ими и заданиями через формы внешнего интерфейса, созданные для
этих целей.

Студентам предоставляется уровень участия ’’Студент” и роль ’’Подписчик” по
умолчанию в WordPress. Учащиеся имеют доступ к просмотру и участвуют только
в тех классах, в которые их приглашают учителя. Подробные сведения о пользова­
тельских ролях и возможностях описаны в главе 6 и главе 15, где рассматриваются
уровни членства для управления доступом.

Классы — это группы BuddyPress
Когда учителя создают "классы", они в действительности создают группы Bud­
dyPress и приглашают своих учеников в группу. Благодаря BuddyPress мы получа­
ем форумы классов, личные сообщения и хороший способ организации наших
пользователей.

Дискуссионные форумы класса работают на плагине bbPress. Новый форум созда­
ется для каждого класса, и BuddyPress управляет доступом к форумам. Подробно­
сти об управлении сторонними плагинами, такими как BuddyPress и bbPress, можно
найти в главе 3.

Назначения — это СРТ
Назначения — это СРТ (пользовательский тип записи), который использует форму
представления внешнего интерфейса для учителей, чтобы публиковать новые на­
значения. Задания похожи на стандартные записи в блоге WordPress, с заголовком,
содержимым тела и вложенными файлами. Учитель, отправляющий задание, явля­
ется автором сообщения.
WordPress имеет встроенные типы сообщений, такие как сообщения и страницы,
и встроенные таксономии, такие как категории и теги. Для SchoolPress мы созда­
дим собственные СРТ и таксономии. Подробнее о создании пользовательских ти­
пов записей и таксономий изложено в главе 5.
42

|

Гпава 1

Представления (подтип) СРТ для назначений
Студенты могут публиковать комментарии по заданию, а также свои официальные
представления через другую форму на веб-интерфейсе.
Представления, как и задания, также являются СРТ. Представления связываются с
назначениями, устанавливая в поле post parent представления идентификатор зада­
ния, в которое оно было отправлено. Студенты могут публиковать текстовые мате­
риалы, а также добавлять одно или несколько приложений к заявке.

Семестры являются таксономией для класса СРТ
Пользовательская таксономия с именем Semester настроена для группы/класса СРТ.
Администраторы школ могут добавлять новые семестры на свои сайты. Например,
можно создать семестр "осень-2019", и учителя могут назначить этот семестр при
создании своих классов. Затем студенты смогут легко просмотреть список всех
классов осени 2019 года.

Департаменты являются таксономией для класса СРТ
Пользовательская таксономия с именем Департамент тоже настроена для груп­
пы/класса СРТ. Они также доступны в виде раскрывающегося списка для учителей
при создании классов и позволяют ученикам просматривать список классов по де­
партаментам.

SchoolPress имеет один
основной пользовательский плагин
За кулисами пользовательские фрагменты приложения SchoolPress управляются из
одного пользовательского плагина под названием SchoolPress. Это основной пла­
гин, он включает в себя определения для различных СРТ, таксономий и ролей
пользователей. Он также содержит код для настройки сторонних плагинов, исполь­
зуемых SchoolPress, таких как Paid Memberships Pro и BuddyPress.

Основной плагин также содержит классы для школьных администраторов, учителей
и учащихся, которые расширяют класс wp user, и классы для классов, заданий и
представлений, которые расширяют класс wp Post. Эти (РНР) классы позволяют ор­
ганизовать наш код в объектно-ориентированном стиле, который облегчает контроль
над тем, как работают наши различные настройки, и позволяет расширять код в бу­
дущем. С этими классами интересно работать, пример приведен в листинге 1.1.

if ($class->isTeacher($current_user))
{
// это учитель, показать ему учительский материал
//...
}
Создание веб-приложений с помощью WordPress

|

43

elseif($class->isStudent($current_user) )
{
// это ученик в классе, показать ему студенческие материалы
//...
}
elseif(is_user_logged_in ())
{
// не вошли в систему, перенаправить их в форму входа
wp_redirect(wp_login_url(get_permalink($class->ID)));
exit;
}
else
{
// не являются членами этого класса, перенаправить на страницу приглашения
wp_redirect($class->invite_url);
exit;
}

Создание пользовательских плагинов описано в главе 3, а расширение класса
user — в главе 6.

wp

В SchoolPress есть несколько других
пользовательских плагинов
Иногда для конкретного приложения будет разработан небольшой программный
код, который также окажется полезным для других проектов. Если код достаточно
содержательный, чтобы он мог работать вне контекста текущего приложения и ос­
новного плагина, то его можно встроить в отдельный пользовательский плагин.
Примером может быть Force First и Last Name как плагин Display Name
(oreil.ly/QVANc), который необходим для этого проекта. Он не требует запуска ос­
новного кода плагина и полезен для других сайтов WordPress вне контекста прило­
жения SchoolPress. Мы создали отдельный плагин для этой функциональности и
поддерживаем его в репозитории WordPress.org, чтобы другие могли применить
его и получить от него выгоду.

SchoolPress использует тему Memberlite
Основной сайт schoolpress.me работает на настроенной дочерней теме Memberlite.
Если администратор школы подписывается на премиальный поддомен, он может
выбрать одну из множества дочерних тем Memberlite; он также может изменить
любой из цветов, шрифтов и логотипов темы, чтобы лучше соответствовать бренду
школы/класса. Кроме того, все темы имеют адаптивный дизайн, который гаранти­
рует, что сайт будет хорошо смотреться на экранах мобильных устройств и план­
шетов, а также на экранах персональных компьютеров.

44

|

Гпава 1

Код темы Memberlite (memberlitetheme.com ) очень строго ограничен, он включает
только то, что связано с отображением. Код темы, очевидно, включает HTML и
CSS для макета сайта, но также содержит некоторую простую логику, которая ин­
тегрируется с основным плагином SchoolPress (как и предыдущий код ветвления).
Однако любой фрагмент кода, который манипулирует пользовательскими типами
записей или пользовательскими ролями или требует большого количества вычис­
лений, передается плагину SchoolPress.

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

Создание веб-приложений с помощью WordPress

|

45

ГЛАВА 2

Основы WordPress
WordPress был впервые разработан в 2003 году и создавался преимущественно как
программное обеспечение для блогов. К выпуску версии 3.5 образ WordPress изме­
нился с блога на универсальную CMS, и слово ’’блог” было фактически удалено из
описания программного обеспечения и большинства мест в исходном коде. Сего­
дня WordPress превратился в крупнейшую веб-платформу и используется примерно
на 30% всех веб-сайтов в Интернете. Этот факт впечатляет еще больше, если при­
вести абсолютные цифры, — более полутора миллиардов интернет-сайтов работа­
ют на WordPress.
WordPress за эти годы приобрел большую популярность по нескольким причинам.
Во-первых, WordPress — это программное обеспечение с открытым исходным ко­
дом, в которое вовлечено целое сообщество людей, вкладывающих средства в его
совершенствование и постоянно пишущих новый код для расширения его функ­
циональности. Пользователи, разработчики и дизайнеры WordPress всегда думают
о новых способах использования WordPress и создают плагины для этих новых
функций, которые могут быть доступны для сообщества.
Еще одна причина, по которой WordPress оказался настолько успешным, заключа­
ется в том, что это чрезвычайно гибкая CMS, включающая в себя хуки и фильтры,
так что разработчики плагинов и тем могут иметь практически полный контроль
при создании различных веб-сайтов. Разработчики постоянно изучают новые инно­
вационные возможности программного обеспечения, в том числе создание веб­
приложений и мобильных приложений, о которых говорится в этой книге. Приме­
нение хуков и фильтров рассматривается далее в этой главе.
Возможно, вы знаете, как использовать WordPress, и уже установили последнюю
версию. Но если вы работаете с WordPress впервые, зайдите на домашнюю стра­
ницу WordPress (wordpress.org), чтобы познакомиться с ним.

Структура каталогов WordPress
Давайте кратко рассмотрим на верхнем уровне папки и файлы, создающиеся при
типичной установке WordPress.

Корневой каталог
В корневом каталоге есть несколько основных файлов WordPress. Если вы не соби­
раетесь копаться в коде ядра WordPress в поисках используемых хуков или не пы46

таетесь узнать, как написаны определенные функции, единственный системный
файл WordPress, который вам может когда-либо понадобиться, — это wpconfig.php. Никогда, никогда, никогда, никогда1 не меняйте никакие другие файлы в
ядре WordPress. Вмешиваться в файлы ядра — плохая идея, потому что обновление
до новой версии WordPress все равно отменит ваши изменения. Единственный ка­
талог, с которым вам нужно взаимодействовать,— это wp-content, поскольку он
содержит ваши плагины, темы и загруженные файлы.
Каждый раз, когда вы захотите изменить основной файл WordPress, подумайте
дважды. Вероятно, есть хук или фильтр, который вы можете использовать для дос­
тижения той же цели. Если для того, что вам нужно, нет хука или фильтра, создайте
его и попросите добавить в ядро. Основные разработчики WordPress очень отзыв­
чивы по поводу добавления новых хуков и фильтров.
Еще один файл, который вам может потребоваться обновить в корневом каталоге
WordPress, в зависимости от настроек и способа применения WordPress: файл
*.htaccess. Это не основной файл WordPress, а файл Apache, с помощью которого
WordPress обрабатывает конфигурацию каталогов, постоянных ссылок и перена­
правлений. Этот файл не существует по умолчанию, он создается WordPress авто­
матически при первом определении структуры ваших постоянных ссылок (perma­
link). Изучите все параметры конфигурации *.htaccess на досуге на странице под­
держки WordPress htaccess (oreil.Iy/ByhN5).

Перечислим каталоги WordPress.
♦ /wp-admin — этот каталог содержит основные каталоги и файлы для управления
интерфейсом панели администратора WordPress. Ключевой файл в этом катало­
ге — admin-ajax.php, через который должны выполняться все запросы Ajax. Мы
рассмотрим Ajax в главе 9.

♦ /wp-includes— содержит основные каталоги и файлы для различных функций
WordPress. Мы настоятельно рекомендуем вам просмотреть структуру и код в
этом каталоге, чтобы лучше понять внутреннюю работу WordPress.
♦ /wp-content— в этом каталоге пользователи и разработчики WordPress могут
заставить WordPress делать что угодно. Он содержит подкаталоги для плагинов
и тем, которые установлены на вашем веб-сайте, а также любые медиафайлы,
которые вы загружаете на свой веб-сайт.

Каталог wp-content содержит несколько подкаталогов, как описано далее.
• /wp-content/plugins — в этом каталоге будет находиться любой плагин WordPress, установленный на вашем сайте WordPress. По умолчанию WordPress
поставляется с плагинами Hello Dolly и Akismet.

Hello Dolly включен в качестве быстрого примера того, как настраивается ос­
новной плагин WordPress. Сам плагин просто отображает случайную строку
из песни ’’Hello Dolly” в правом верхнем углу панели администратора.

...никогда, никогда, никогда...

Основы WordPress

|

47

Плагин Akismet помогает останавливать спам в комментариях, проверяя
входящие комментарии в базе данных по адресу akismet.com. Этот плагин
и сервис значительно уменьшают количество спам-комментариев, которые
попадают на ваш сайт. Услуга Akismet бесплатна (или сами назовите цену)
для личного пользования.

• /wp-content/themes — в этом каталоге будет находиться любая тема WordPress,
установленная на вашем сайте WordPress. По умолчанию WordPress постав­
ляется с несколькими стандартными темами, названными по названию года
выпуска (Twenty Seventeen — 2017, Twenty Nineteen — 2019 и т. д.).

• /wp-content/uploads— как только вы начнете загружать любые фотографии
или файлы в библиотеку мультимедиа, то увидите, что данный каталог запол­
няется этими загруженными файлами. Все загруженные медиафайлы хранятся
в каталоге uploads. Некоторые плагины также создают подкаталоги в каталоге
uploads для различных файлов, используемых или управляемых плагином.
• /wp-content/mu-plugins. В WordPress вы можете принудительно активизиро­
вать любой плагин, создав каталог mu-plugins внутри каталога wp-content.
Этот каталог не существует, пока вы его не создадите. ”Ми” означает ’’must
use— необходимо использовать”, и любой плагин, который вы вставите в
папку mu-plugins, будет автоматически запускаться без необходимости акти­
вации вручную на странице администрирования плагинов. На самом деле вы
даже не увидите его в списке MU-плагинов.

Обязательные плагины особенно полезны в многосайтовых установках WordPress,
потому что вы можете подключить плагины, которые администраторы вашего сай­
та не смогут деактивировать.
Рекомендуется проверить папку mu-plugins на каждом существующем сайте, над
которым вы начинаете работать, и посмотреть, есть ли в нем какие-либо плагины,
и, если да, определить, что они делают. Много раз отлаживая проблему, мы задава­
лись вопросом, почему происходило что-то необычное, даже несмотря на то, что
мы отключили все активные плагины, а в итоге оказывалось, что за эту проблему
ответственен один упущенный mu-плагин.

Структура базы данных WordPress
WordPress работает поверх базы данных MySQL и создает свои собственные таблицы
для хранения данных и контента. Далее приведена схема базы данных, созданная ин­
сталляцией WordPress по умолчанию. Мы также включили некоторую основную ин­
формацию о встроенных функциях WordPress для взаимодействия с этими таблица­
ми. Если вы поймете схему базы данных и освоите функции из списка в этой главе,
то сможете добавлять любые данные в WordPress и извлекать их из него.
В названиях следующих таблиц по умолчанию задан префикс wp_. Вы можете из­
менить этот префикс во время установки WordPress. Таким образом названия таб­
лиц вашей установки WordPress могут отличаться.

48

|

Гпава 2

Таблица wp_options
В таблице wp options находятся данные всего сайта. Здесь хранятся имя, описание и
адрес электронной почты администратора, которые вы указали при обычной уста­
новке. Эта таблица также поставляется с несколькими записями, которые хранят
различные настройки по умолчанию в WordPress. В табл. 2.1 приведена структура
базы данных для таблицы wp options.

Таблица 2.1. Структура базы данных для таблицы
Схема
сопоставления

wp_options

Нулевое
значение

Значение
по умол­
чанию

Допол­
нительно

No

None

AUTO INCREMENT

Столбец

Тип данных

option id

bigint(20)

option name

varchar(64)

utf8 general ci

No

option value

longtext

utf8 general ci

No

None

autoload

varchar(20)

utf8 general ci

No

Yes

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

Функции в каталоге /wp-includes/option.php
В каталоге /wp-includes/option.php присутствуют следующие функции:
♦ add_option(string $option, mixed $value =
string $deprecated = ’’,
string | bool $autoload = ’yes') — Сначала Проверяет, существует ЛИ option_name
перед вставкой новой строки:



$option — обязательная для заполнения строка option name — имя параметра,
который вы хотите добавить;



$vaiue — необязательная переменная option value смешанного типа — значе­
ние, которое вы хотите добавить. Если переданная переменная является мас­
сивом или объектом, то значение будет сериализовано перед сохранением в
базе данных;



$deprecated — этот параметр устарел в версии 2.3, больше не используется2;



$autoioad— необязательный логический тип, указывающий, загружать ли
опцию в кэш при запуске WordPress, и имеющий значения yes или по. Значе-

2 Третий параметр для add option, который устарел в версии 2.3, раньше был строкой ’’описания",
которая хранилась вместе с параметром в таблице wp options.

Основы WordPress

|

49

ние по умолчанию — yes. Если вы уверены, что вам понадобится эта опция
при каждой загрузке страницы, то можете оставить значение по умолчанию.
Если эта опция нужна вам только на определенных страницах, то для авто­
загрузки лучше установить значение по.
♦ update_option($option, $newvaiue) — обновляет существующую опцию, но также
создает ее, если она еще не существует:


Soption — обязательная для заполнения строка option name — имя параметра,
который вы хотите добавить/обновить;



Snewvaiue— необязательная переменная option value смешанного типа —
значение, которое вы хотите добавить/обновить.

♦ get_option(Soption, Sdefault = false) —извлекает opt ion_value ДЛЯ предостав­
ленного option_name:



Soption — обязательная для заполнения строка option name — имя параметра,
который вы хотите получить;



Sdefault — необязательная переменная смешанного типа, которую вы хотели
бы вернуть, если в таблице отсутствует option name, которое вы указали. По
умолчанию этот параметр имеет значение false.

♦ delete option (Soption) — удаляет существующую опцию из базы данных навсегда:

Soption — обязательная для заполнения строка option name — имя параметра,
который вы хотите удалить.



Большинство примеров кода в этой книге — не полностью функциональный про­
граммный код, а основные примеры использования функций, о которых мы гово­
рим. Вы можете выполнять большинство примеров программ в пользовательском
плагине или в файле functions.php вашей темы.
В листинге 2.1 продемонстрированы некоторые основные функции для взаимодей­
ствия с таблицей wp options.



Таблица wp_users
Когда вы входите в WordPress с вашим именем пользователя и паролем, то ссылае­
тесь на данные, хранящиеся в этой таблице. Все пользователи и их данные по
умолчанию хранятся в таблице wp users. В табл. 2.2 приведена структура базы дан­
ных ДЛЯ Таблицы wp users.

Основы WordPress

|

51

Таблица 2.2. Структура базы данных для таблицы wp_users
Столбец

Тип данных

ID

bigint(20)

user login

varchar(60)

utf8 general ci

No

user pass

varchar(64)

utf8 general_ci

No

user nicename

varchar(50)

utf8 general ci

No

user email

varchar(100)

utf8 general ci

No

user url
user registered

varchar(100)
datetime

utf8 general ci

No
No

user activation
key
user status

varchar(60)

utf8 general ci

display name

varchar(250)

Схема сопостав­
ления

int(11)

Нулевое
значение

Значение
по умол­
чанию

Допол­
нительно

No

None

AUTO_
INCREMENT

No
No

utf8 general ci

000000-00
00:00:00

0

No

Для многих приложений WordPress создавать и управлять пользователями вы буде­
те через графический интерфейс администратора. Однако если вам потребуется
создать пользователей в своем программном коде или обновить метаданные о них,
то будут полезны функции, описанные в следующем разделе.

Функции в каталоге /wp-includes/...
Эти функции находятся в файлах /wp-include/pluggable.php и /wp-includes/user.php.
♦ wp_insert_user ($userdata) — создает нового пользователя в базе данных. Эту
функцию также можно задействовать для обновления пользователя, если иден­
тификатор пользователя передается вместе с $user_data. $userdata — обязатель­
ный массив имен и значений полей. Поля, которые нужно передать, следующие:



id— целое число, которое будет использоваться для обновления сущест­
вующего пользователя;

• user pass — строка, содержащая простой текстовый пароль пользователя;

• user login — строка, содержащая имя пользователя для входа в систему;
• user nicename — строка, содержащая удобное для пользователя имя пользова­
теля. По умолчанию совпадает с username пользователя;
• user uri — строка, содержащая URL-адрес веб-сайта пользователя;
• user email — строка, содержащая адрес электронной почты пользователя;
52

|

Гпава 2

• display name — строка, которая будет показана на сайте. По умолчанию сов­
падает с именем пользователя. Вполне вероятно, что вы захотите изменить
его, чтобы все отображалось красиво;
• nickname— псевдоним пользователя. По умолчанию совпадает С username
пользователя;



first name — имя пользователя;



last name — фамилия пользователя;

• description — строка, содержащая информацию о пользователе;


rich editing — строка активации визуального редактора. Значение false, если
не пуста;

• user registered — Дата, КОГДа пользователь зарегистрировался. Формат: Y-m-d
Н: i: s;


role — строка, используемая для установки роли пользователя.

♦ wp_create_user ($ username, $ password, $ email) — Эта функция ИСПОЛЬЗует
предыдущую функцию wp insert user () и облегчает добавление нового пользо­
вателя на основе обязательных столбцов:



$username — обязательная строка имени пользователя/логина нового пользо­
вателя;



$password — обязательная строка пароля нового пользователя;



$emaii — обязательная строка адреса электронной почты нового пользователя.

♦ wp update user ($userdata) — функция ДЛЯ обновления любого ПОЛЯ В таблицах
wp users и wp—Usermeta (рассматривается далее), связанных с конкретным пользо­
вателем. Обратите внимание, что если пароль пользователя обновляется, все его
cookie будут удалены, произойдет выход из его аккаунта WordPress:



$userdata — обязательный массив имен полей и значений, id и хотя бы одно
другое поле обязательны для заполнения. Эти поля те же, что приняты в
функции wp_insert_post ().

♦ get user by($field, $value) — Эта функция возвращает объект WP User в случае
успеха и false — в противном случае. Класс WordPress user находится в файле
/wp-includes/capabilities.php и в основном делает запросы в таблицу wp user сле­
дующим образом: SELECT * FROM wp_users WHERE $field = $value.

Класс wp user кэширует результаты, чтобы избежать запросов к базе данных ка­
ждый раз, когда он вызывается. Класс также использует роли и возможности
конкретного пользователя, о чем мы более подробно расскажем в главе 6:


$fieid— обязательная строка поля, по которой вы хотите запросить данные
пользователя. Эта строка может быть только id, slug, email или login;



$ value — обязательное целое число или строка — значение для данного иден­
тификатора, описания, адреса электронной почты или имени.
Основы WordPress

|

53

♦ get—Userdata ($userid) — эта функция фактически вызывает предыдущую функ­
цию get user by () и возвращает тот же объект wp user:



$userid — обязательное целое число — идентификатор пользователя, для ко­
торого вы хотите получить данные.

♦ wpdeleteuser ($id, $reassign = ’novalue') — Эта функция удаляет пользовате­
ля, а также может переназначать любые его сообщения или ссылки другому
пользователю:



$id — обязательное целое число — идентификатор пользователя, которого вы
хотите удалить;



$ reassign — необязательное целое число — идентификатор пользователя, на
которого вы хотите переназначить любой пост или ссылку удаленного поль­
зователя.

В листинге 2.2 продемонстрированы некоторые основные функции для взаимодей­
ствия С таблицей wp_users.