Потребление внешнего API в WordPress?
У меня есть клиент с сайтом на WordPress, и он хочет расширить его функциональность. Эти функции уже реализованы на другом сайте, который я разработал (своего рода поисковая система по базе данных с фильтрами), и который сейчас находится в процессе доработки.
Я планирую создать JSON API для моего сайта (со всеми функциями поиска по моей базе данных) и сделать так, чтобы сайт на WordPress потреблял этот API. После этого мне нужно будет только создать представления для отображения результатов поиска.
Проблема в том, что я совсем не знаю WordPress (для меня это просто система, где можно добавлять статьи через админ-панель...) и не знаю, как можно писать собственный серверный код в нем. Я искал в Google и нашел что-то под названием "плагин", но я не уверен, возможно ли это сделать, и является ли это самым простым способом, так как мне не нужно, чтобы код использовался какой-либо третьей стороной. Если возможно модифицировать установку WordPress, чтобы добавить мои PHP-файлы и написать необходимый код (мои представления с тем же CSS WordPress), это было бы проще, но я не знаю, возможно ли это?

Краткое введение в разработку для WordPress, которое может помочь или запутать вас:
Главное, что нужно помнить: всё это просто PHP. И ещё: не редактируйте основные файлы WordPress, потому что у вас возникнут проблемы при обновлении до новой версии. Единственный код, который вы должны редактировать, — это код плагинов и тем.
Если вам нужно только добавить что-то к существующей странице, может сработать простое редактирование нужного файла темы. Однако, если вам нужно сделать что-то более сложное (например, добавить дополнительное "представление" по определённому URL), вам нужно добавить код в место, которое загружается раньше в процессе загрузки WordPress.
Причина в том, что WordPress всегда выполняет запрос к записям на основе URL. Если вы перейдёте на /category/banana/
, он запросит записи категории banana
и загрузит соответствующий шаблон, в котором вам останется только пройтись по записям и отобразить их. Однако, если вы перейдёте на /custom-view/
, WordPress, скорее всего, не найдёт записей и загрузит шаблон 404 — и у вас не будет простого способа это исправить!
Некоторые решают эту проблему, создавая "заглушки страниц": они создают в WordPress страницу, содержимое которой не важно, важен только шаблон — там они делают всё, что хотят. Это не слишком элегантно, но работает. Чистый способ — определить дополнительные правила перезаписи, которые сообщат WordPress, что /custom-view/
— это допустимый URL, но там должно происходить что-то другое.
Если вы хотите сделать это, вам нужно подключиться к ядру WordPress. Ключевое слово здесь — подключиться, а не изменить. В WordPress есть действия (actions) и фильтры (filters). Действие — это просто объявление ("Эй, мы сейчас пишем тег <head>
. Хотите что-то добавить?"). Фильтр позволяет изменить переменную ("Вот заголовок записи. Если хотите его изменить, верните новое значение"). Конечно, теперь задача — понять, какие действия и фильтры использовать. Это зависит от выбранного способа (заглушки страниц или новые правила перезаписи), поэтому я не буду углубляться в детали.
Вы определяете действия и фильтры, которые хотите использовать, в файле плагина или в файле functions.php вашей темы. Они особенные, потому что загружаются во время загрузки WordPress, то есть до выполнения основного запроса и так далее. Файл плагина — это просто PHP-файл, помещённый в директорию wp-content/plugins/
, с особым заголовком, чтобы WordPress мог прочитать его название и отобразить в административной панели, где вы можете включать и отключать его (так что плагин можно оставить в директории, но временно деактивировать).

Основы
Вам необходимо освоить основы плагинов и тем. Вкратце: это дополнения к основной функциональности WordPress. Обычно "Плагины" больше связаны с функциональностью, а "Темы" — с "отображением". Возможно, вам также стоит почитать о "Plugin API".
JSON
Вы можете использовать встроенный в ядро скрипт json2, чтобы предоставить "безопасный" API.
Пример JSON
Остальное будет выглядеть примерно так:
$response = json_encode( array(
'data' => $your_output
) );
header( "Content-Type: application/json" );
echo $response;
XML Rpc
В Codex также есть информация о "XML Rpc".
HTTP API
Еще одна возможность — это HTTP-запросы. Обязательно ознакомьтесь со ссылками внизу страницы.
Вебхуки
Это дополнительная информация, так как она больше связана с предоставлением потребляемого API. Объяснение здесь. Также существует плагин под названием HookPress, который выполняет эту работу за вас. Несколько слайдов от автора также доступны.

Я предполагаю, что вы знаете PHP? Или это тоже барьер?
По сути, плагины в WordPress — это соглашение о том, как упаковать PHP-код, чтобы он распознавался и обрабатывался ядром WordPress. Это формат, а не функциональность.
Что касается фактической функциональности, вы можете выполнять практически любой PHP-код, но хорошей практикой считается использование API WordPress для обеспечения совместимости и надежности.
Думайте о своем коде в контексте WordPress как о include
(технически так оно и будет). Отсюда уже зависит от ваших потребностей и ресурсов, какая часть кода будет переписана специально для WordPress.

Да, это возможно.
Большинство плагинов создаются с помощью так называемых хуков:
Например:
add_action("hook", "function")
Довольно просто создать собственный плагин, как только вы поймете, как работает эта структура... Я бы посоветовал вам ознакомиться с ней. Наиболее полным источником информации (хотя и не самым организованным - как php.net) является WordPress Codex.
