Оглавление....6
Вступительное слово....16
Предисловие....18
Для кого предназначена эта книга....18
Для кого НЕ предназначена эта книга....19
Структура книги....19
О коде программ....21
Условные обозначения....21
Использование примеров программного кода....22
Благодарности....24
ГЛАВА 1. Создание веб-приложений с помощью WordPress....26
Что такое веб-сайт?....26
Что такое приложение?....26
Что такое веб-приложение?....26
Функции веб-приложения....27
Мобильные приложения....28
Прогрессивные веб-приложения....29
Зачем нужен WordPress?....30
Вы уже используете WordPress....30
С помощью WordPress легко управлять контентом....30
WordPress позволяет просто и безопасно управлять пользователями....31
Плагины....31
Гибкость важна....32
Частые обновления безопасности....32
Стоимость....33
Ответы на некоторые распространенные критические мнения о WordPress....33
Когда не следует использовать WordPress....36
Вы планируете лицензировать или продавать технологию своего сайта....36
Имеется другая платформа, которая приведет вас к цели быстрее....37
Гибкость не важна для вас....37
Ваше приложение должно работать в режиме реального времени....38
WordPress как фреймворк....38
WordPress и фреймворки Framework-View-Controller....39
Анатомия приложения WordPress....41
Что такое SchoolPress?....42
SchoolPress работает в многосайтовой сети WordPress....42
Бизнес-модель SchoolPress....42
Уровни участия и роли пользователей....43
Классы — это группы BuddyPress....43
Назначения — это СРТ....43
Представления (подтип) СРТ для назначений....44
Семестры являются таксономией для класса СРТ....44
Департаменты являются таксономией для класса СРТ....44
SchoolPress имеет один основной пользовательский плагин....44
В SchoolPress есть несколько других пользовательских плагинов....45
SchoolPress использует тему Memberlite....45
ГЛАВА 2. Основы WordPress....47
Структура каталогов WordPress....47
Корневой каталог....47
Структура базы данных WordPress....49
Таблица wp options....50
Функции в каталоге /wp-includes/option.php....50
Таблица wp_users....52
Функции в каталоге /wp-includes/....53
Таблица wp_usermeta....56
Таблица wp_posts....60
Функции в каталоге /wp-includes/post.php....61
Таблица wp_postmeta....65
Функции из каталога /wp-includes/post.php....65
Таблица wp comments....69
Функции в каталоге /wp-includes/comment.php....70
Таблица wpcommentsmeta....74
Функции из каталога /wp-includes/comment.php....74
Таблица wp_terms....76
Функции в каталоге /wp-includes/taxonomy.php....77
Таблица wptermmeta....80
Таблица wp term taxonomy....82
Функции в каталоге /wp-includes/taxonomy.php....82
Таблица wp_termrelationships....83
Хуки: события и фильтры....84
События....85
Фильтры....86
Среды разработки и хостинг....87
Работа локально....87
Выбор веб-хостинга....88
Среды разработки, интеграции и доставки....88
Расширение WordPress....89
ГЛАВА 3. Использование плагинов WordPress....90
General Public License, версия 2....91
Установка плагинов WordPress....91
Создание собственного плагина....92
Структура файла плагина приложения....93
Каталог /adminpages/....94
Каталог /classes/....95
Каталог /css/....95
Каталог /js/....96
Каталог /images/....97
Каталог /includes/....97
Каталог /includes/lib/....98
Каталог /pages/....98
Каталоги /services/ и /scheduled/....99
Файл schoolpress.php....99
Дополнения к существующим плагинам....100
Случаи из практики и примеры....100
Цикл WordPress....101
Глобальные переменные WordPress....101
Бесплатные плагины....112
Admin Columns....112
Advanced Custom Fields....112
BadgeOS....113
Posts 2 Posts....113
Members....114
W3 Total Cache....114
Yoast SEO....114
Премиальные плагины....115
Gravity Forms....115
BackupBuddy....115
WP All Import....116
Плагины сообщества....116
BuddyPress....116
ГЛАВА 4. Темы....129
Темы и плагины....129
Где разместить код при разработке приложений....129
Где разместить код при разработке плагинов....130
Где разместить код при разработке тем....130
Иерархия шаблонов....131
Шаблоны страниц....132
Образец шаблона страницы....132
Использование хуков для копирования шаблонов....135
Когда следует использовать шаблон темы?....137
Функции WordPress для работы с темами....137
Использование переменной locate template в плагинах....138
Файл style.css....140
Создание версий CSS-файлов вашей темы....141
Файл functions.php....142
Темы и СРТ....143
Популярные фреймворки для разработки тем....143
Фреймворки тем WordPress....143
Сторонние фреймворки тем....145
Создание дочерней темы для Memberlite....145
Включение Bootstrap в тему вашего приложения....146
Меню....147
Навигационные меню....148
Динамические меню....149
Адаптивный дизайн....149
Определение устройства и дисплея с помощью CSS....150
Определение устройств и их свойств в JavaScript....151
Определение устройства в РНР....154
Последнее замечание по определению браузера....158
ГЛАВА 5. Пользовательские типы записей, метаданные записей и таксономия....159
Типы сообщений по умолчанию и СРТ....159
Страница....159
Публикация....159
Вложение....159
Редакции....160
Элемент меню навигации....160
Пользовательский CSS....160
Наборы изменений....160
Кеш oEmbed....160
Пользовательские запросы....161
Повторно используемые блоки....161
Определение и регистрация СРТ....161
Функция register_post_type($post_type, $args)....162
Что такое таксономия и как ее использовать?....169
Таксономии и метаданные постов....170
Создание пользовательских таксономий....172
Функция register taxonomy(Staxonomy, Sobjecttype, $args)....172
Функция register taxonomy Jbr_object_type($taxonomy, $object_type)....175
Использование СРТ и таксономий в ваших темах и плагинах....176
Тема архива и файлы шаблона Single....176
Старый добрый класс WP Query и методов/_posts()....176
Метаданные и СРТ....180
Функция add_meta_box($id, Stitle, ^callback, $screen, Scontext, Spriority, Scallbackargs)....180
Использование метаблоков в редакторе блоков Block Editor....183
Пользовательские классы-оболочки для СРТ....184
Расширение класса WP Post в сравнении с созданием класса-обертки....187
Зачем нужны классы Wrapper?....187
Держите СРТ и таксономии вместе....187
Держите все в классе-обертке....189
Классы Wrapper читаются лучше....191
ГЛАВА 6. Пользователи, их роли и возможности....192
Получение данных пользователей....193
Добавляем, обновляем и удаляем пользователей....195
Хуки и фильтры....199
Что такое роли и возможности?....200
Проверка роли и возможностей пользователя....201
Создание собственных ролей и возможностей....203
Расширение класса WP User....205
Добавление полей регистрации и профиля....207
Настройка таблицы пользователей на административной панели....212
Плагины....214
Theme Му Login....214
Hide the Admin Bar....214
Paid Memberships Pro....214
PMPro Register Helper....215
Members....215
WP User Fields....216
ГЛАВА 7. Работа с API-интерфейсами WordPress, объектами и вспомогательными функциями....217
API шорткодов....217
Атрибуты шорткода....218
Вложенные шорткоды....219
Удаление шорткодов....220
Другие полезные функции, связанные с шорткодами....221
API виджетов....221
Прежде чем добавить свой собственный виджет....222
Добавление виджетов....222
Определение области виджета....226
Встраивание виджета вне динамической боковой панели....228
Удаление виджетов с панели инструментов....230
Добавление собственного виджета на панель инструментов....232
API настроек....235
Вам действительно нужна страница настроек?....235
Не могли бы вы использовать вместо этого хук или фильтр?....236
Учет стандартов при добавлении настроек....237
Игнорирование стандартов при добавлении настроек....238
API перезаписи....239
Добавление правил перезаписи....239
Сброс правил перезаписи....240
Другие функции перезаписи....241
Функция WP-Cron....244
Добавление своих интервалов....246
Планирование единичных событий....247
Запуск заданий Cron с сервера....247
Использование только серверного Cron....248
Функция WP Mail....249
Отправка более приятных писем с помощью WordPress....250
API заголовка файла....251
Добавление заголовков файлов в ваши собственные файлы....254
Добавление новых заголовков в плагины и темы....255
Heartbeat API....256
ГЛАВА 8. Безопасность в WordPress....261
Почему это важно....261
Основные меры безопасности....262
Регулярно выполняйте обновление....262
Не используйте имя пользователя «admin»....262
Выбирайте надежный пароль....262
Примеры плохих паролей....263
Примеры хороших паролей....263
Усиление защиты в WordPress....264
Запретите администраторам редактировать плагины и темы....264
Измените префикс таблиц базы данных....264
Переместите в другое место файл wp-config.php....265
Не отображайте сообщения об ошибках авторизации....266
Не отображайте номер версии WordPress....266
Исключите возможность авторизации через страницу wp-login.php....267
Добавьте в файл *.htaccess кастомные правила, блокирующие доступ к каталогу wp-admin....268
SSL-сертификаты и HTTPS....269
Установка SSL-сертификата на сервере....269
Авторизация и доступ к панели администратора WordPress по протоколу SSL....272
Отладка проблем с протоколом HTTPS....273
«Атомный» способ устранения ошибок протокола SSL....274
Резервируйте все!....276
Сканируйте, сканируйте и еще раз сканируйте!....276
Полезные плагин для обеспечения безопасности....277
Плагины для блокировки спама....277
Плагины для резервного копирования....277
Плагины-брандмауэры/сканеры....278
Плагины для защиты авторизации и пароля....279
Написание безопасного кода....279
Проверяйте полномочия пользователей....279
Кастомные инструкции SQL....281
Валидация, санация и экранирование данных....281
Одноразовые коды....285
ГЛАВА 9. JavaScript-фреймворки и рабочий процесс....292
Что такое ECMAScript?....293
Что такое ES6?....294
Что такое ES9?....294
Что такое ESNext?....294
Что такое Ajax?....294
Что такое JSON?....294
jQuery и WordPress....295
Подключение других JavaScript-библиотек....296
Где следует размещать кастомный JavaScript-код....297
Ajax-вызовы в WordPress с использованием jQuery....298
Управление количеством Ajax-запросов....303
Heartbeat API....305
Инициализация....305
Клиентский JavaScript-код....306
Серверный РНР-код....307
Инициализация....308
Клиентский JavaScript-код....309
Серверный РНР-код....310
Ограничения WordPress в плане асинхронной обработки....311
JavaScript-фреймворки....312
Backbone.js....312
React....313
ГЛАВА 10. REST API в WordPress....315
Что такое REST API?....315
API....315
REST....316
JSON....316
HTTP....316
Зачем нужен REST API в WordPress?....319
Использование WordPress REST API версии 2....321
Обнаружение....321
Аутентификация....321
Маршруты и конечные точки....327
Запросы....327
Ответы....329
Добавление собственных маршрутов и конечных точек....330
Функция register_rest_route($namespace, $route, $args, $override)....330
Настройка плагина WordPress Single Sign-On....331
Добавление маршрута /wp-sso/vl/check....331
Подключение к нашему плагину базовой аутентификации....333
Использование настроенной нами конечной точки для проверки учетных данных пользователя....334
Популярные плагины, использующие WordPress REST API....335
WooCommerce....336
BuddyPress....337
Paid Memberships Pro....339
ГЛАВА 11 Проект Gutenberg, блоки и кастомные типы блоков....343
Редактор системы WordPress....344
Плагин Classic Editor....345
Блоки для контента и дизайна....345
Блоки для представления функциональности....345
Создание собственных блоков....346
Пример простейшего блока....346
Использование кастомных блоков для разработки интерфейсов приложений....348
Активация редактора блоков для кастомных типов постов....348
Категории блоков....349
Блоки домашнего задания....350
Ограничение типа блоков до определенных кастомных типов постов....350
Ограничение кастомного типа постов до определенных блоков....351
Шаблоны блоков....352
Сохранение данных блока в метаданных поста....354
Советы....355
Активируйте режим отладки с помощью константы WP SCRIPT DEBUG....355
Задавайте версию скрипта с помощью функции filemtime()....356
Дополнительные советы....356
Глубже изучите JavaScript, Node.js и React....356
ГЛАВА 12. Многосайтовые сети в WordPress....358
Когда целесообразна многосайтовость?....358
Когда лучше отказаться от многосайтовости?....359
Альтернативы многосайтового режима....360
Множество авторов или категорий на одном и том же WordPress-сайте....360
Кастомные типы постов....360
Абсолютно самостоятельные сайты....361
Сервис обслуживания WordPress-сайтов....361
Мультиарендность....361
Настройка многосайтовой сети....361
Администрирование многосайтовой сети....364
Панель администратора....364
Сайты....364
Пользователи....365
Темы....366
Плагины....366
Настройки....366
Обновления....367
Структура базы данных многосайтовой сети....368
Общесетевые таблицы....368
Индивидуальные таблицы сайтов....370
Совместно используемые таблицы сайтов....371
Сопоставление доменов....371
Некоторые полезные плагины для многосайтового режима....372
Расширение User Registration для плагина Gravity Forms....373
Расширение Member Network Sites для плагина Paid Memberships Pro....373
Плагин More Privacy Options....373
Плагин Multisite Global Media....373
Плагин Multisite Plugin Manager....373
Плагин Multisite Global Search....374
Плагин Multisite Robots.txt Manager....374
Плагин NS Cloner: Site Copier....374
Плагин WP Multi Network....374
Основная функциональность многосайтовости....374
Переменная Sblogid....375
Функция is_multisite()....375
Функция get current_blog_id()....375
Функция switch to_blog($new blog)....376
Функция restore current_blog()....376
Функция get_blog_details($fields = null, Sgetall = true)....377
Функция update blog details($blog_id, Sdetails = array())....378
Функция get_blog_status($id, Spref)....379
Функция update_blog_status($blog_id, Spref $value)....379
Функция get_blog_option($id, Soption, Sdefault = false)....379
Функция update_blog_option($id, $option, Svalue)....380
Функция delete blog_option($id, Soption)....380
Функция get_blog_post($blog_id, Spostid)....380
Функция add_user_to_blog($blog_id, Suserid, Srole)....381
Функция wpmu delete user(Suser id)....381
Функция create empty blog (Sdomain, Spath, Sweblogtitle, Ssiteid = 1)....382
He упомянутые здесь функции....382
ГЛАВА 13. Локализация приложений WordPress....383
Нужна ли локализация вашему приложению?....383
Как выполняется локализация в WordPress....384
Определение локали в WordPress....384
Текстовые домены....385
Настройка текстового домена....385
Подготовка строк с помощью функций перевода....387
Функция____(Stext, $domain = "default")....388
Функция _e($text, Sdomain = "default")....388
Функция _x($text, Scontext, Sdomain =....389
Функция _ex($title, Scontext, Sdomain = "default”)....389
Сочетание перевода с экранированием....390
Создание и загрузка файлов перевода....390
Организация файлов локализации....391
Генерирование файла *.pot....391
Создание файла *.po....393
Создание файла *.mo....393
GlotPress....393
Использование GlotPress для ваших плагинов и тем в репозитории WordPress.org....394
Создание собственного сервера GlotPress....394
ГЛАВА 14. Оптимизация и масштабирование WordPress....395
Терминология....395
Источник или внешнее окружение?....397
Тестирование....397
Что следует тестировать....398
Панель отладки браузера Chrome....400
Инструмент Site Health системы WordPress....402
Apache Bench....403
Siege....410
W3 Total Cache....411
Настройки страничного кэширования....412
Минимизация....414
Кэширование базы данных....415
Объектное кэширование....415
Сети доставки контента....416
GZlP-сжатие....416
Хостинг....416
Хостинги, специально предназначенные для WordPress-сайтов....417
Развертывание собственного сервера....417
Выборочное кэширование....431
API для работы с транзиентами....432
Транзиенты в многосайтовом режиме....435
Повышение производительности с помощью JavaScript-кода....435
Кастомные таблицы....437
Действие в обход WordPress....439
ГЛАВА 15. Электронная коммерция....441
Выбор плагина....441
WooCommerce....441
Paid Memberships Pro....444
Easy Digital Downloads....445
Платежные системы....448
Торговые счета....449
Настройка модели SaaS с помощью Paid Memberships Pro....450
Модель SaaS....450
ГЛАВА 16. Мобильные приложения на платформе WordPress....465
Сценарии использования мобильных приложений....465
Нативные и гибридные мобильные приложения....466
Что такое нативное мобильное приложение?....466
Что такое гибридное мобильное приложение?....467
Почему стоит создавать гибридные приложения вместо нативных?....467
Cordova....468
Ionic Framework....472
Приложение-обертка....474
AppPresser....474
ГЛАВА 17. PHP-библиотеки, интеграция веб-сервисов и миграция с других платформ....489
РНР-библиотеки....489
Генерация и модификация изображений....490
Генерация PDF....492
Геолокация и геотаргетинг....495
Сжатие и архивация данных....497
Инструменты для разработки....501
Внешние API-интерфейсы и веб-сервисы....503
Elasticsearch....503
ElasticPress by 1 Oup....503
Google Vision....504
Google Maps....504
Google Translate....505
Twilio....505
Другие популярные API-интерфейсы....506
Миграция....507
Миграция между серверами....508
Миграция между платформами....509
Руководство по привязке данных....511
ГЛАВА 18. Взгляд в будущее....512
Оглядываясь назад....512
REST API....513
Плагины WordPress будут уделять больше внимания API-интерфейсам....513
«Обезглавленные» версии WordPress....513
GraphQL....514
Gutenberg....515
Интерфейс администратора перейдет на React/Gutenberg....515
Gutenberg будет применяться для редактирования контента на клиентской стороне WordPress....515
Шаблоны блоков заменят темы оформления....515
Блоки заменят плагины....516
Доля WordPress на рынке будет колебаться....516
WordPress станет более популярной платформой для мобильной разработки....517
WordPress будет оставаться хорошим выбором для разработки любого рода приложений....517
Об авторах....518
Предметный указатель....519
Подробно рассматривается создание веб-приложений на платформе WordPress, в том числе для мобильных устройств, принципы работы таких приложений. Описана структура каталогов и базы данных, приведены типы записей, метаданных и таксономий, перечислены основные классы и функции. Уделено внимание разработке собственной темы оформления с адаптивным дизайном. Рассказывается о типах пользователей и их ролях в архитектуре WordPress. Отдельная глава посвящена работе с API-интерфейсами, объектами и вспомогательными функциями, рассматриваются вопросы безопасности веб-приложений, принципы написания безопасного кода. Изучается REST API в WordPress, JavaScript-фреймворки, способы локализации приложений. Описаны принципы построения многосайтовых сетей, оптимизации и масштабирования. Рассматривается проект Gutenberg и его возможности.
Во втором издании авторы рассматривают новые функции и возможности актуальных версий WordPress. Все примеры кода из книги доступны на веб-сервисе GitHub.
Эта книга будет наиболее полезна разработчикам WordPress, которые хотят работать над более сложными приложениями, и разработчикам PHP, имеющим некоторый опыт работы с WordPress, которые ищут фреймворк для приложений на основе PHP.
Разработчики коммерческих плагинов и тем, а также все, кто работает над крупными распределенными проектами WordPress, также сочтут полезными концепции и методы этой книги.
Мы предполагаем, что читатели имеют представление о программировании на языке PHP. Вы также должны иметь базовые знания HTML и CSS и знакомы с запросами MySQL и SQL. Базовое понимание программирования на JavaScript и jQuery поможет вам при прочтении главы 9.
Эта книга не для людей, которые хотят научиться использовать WordPress в качестве конечного пользователя. Будут кратко представлены стандартные функции WordPress, но мы предполагаем, что вы уже знакомы с WordPress с точки зрения пользователя.
Эта книга не предназначена для непрограммистов. Хотя можно создавать очень функциональные веб-приложения, просто комбинируя и настраивая многие плагины, доступные для WordPress, эта книга написана для разработчиков, создающих свои собственные плагины и темы для работы с новыми веб-приложениями.
Эта книга научит вас не программированию, а скорее тому, как программировать «в стиле WordPress».