Статьи

XML-RPC для разработчиков WordPress

XML-RPC — это протокол удаленного вызова процедур (один процесс вызывает функцию другого процесса через удаленное соединение), который использует XML для представления данных и HTTP для выполнения вызовов. Хотя приложения могут явно предоставлять свои собственные API REST для RPC, стандартный протокол может помочь в обеспечении безопасности и предоставить множество других преимуществ. Например, разработчикам не нужно разрабатывать архитектуру REST API с нуля, а также можно использовать один клиент для удаленного вызова процедур для различных серверных приложений, которые поддерживают стандартный протокол. Поэтому XML-RPC был представлен как стандартный протокол для RPC.

XML-RPC для WordPress

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

Обзор запроса и ответа протокола XML-RPC

Чтобы сделать запрос XML-RPC, вам нужно обернуть имя и параметры удаленной функции в формате XML, а затем отправить запрос POST, используя HTTP.

Это пример HTTP-запроса XML-RPC:

POST /xmlrpc HTTP 1.0 User-Agent: myXMLRPCClient/1.0 Host: 192.168.124.2 Content-Type: text/xml Content-Length: 169 <?xml version="1.0"?> <methodCall> <methodName>circleArea</methodName> <params> <param> <value><double>2.41</double></value> </param> </params> </methodCall> 

Вот пример ответа на вышеуказанный запрос:

 HTTP/1.1 200 OK Date: Sat, 06 Oct 2001 23:20:04 GMT Server: Apache.1.3.12 (Unix) Connection: close Content-Type: text/xml Content-Length: 124 <?xml version="1.0"?> <methodResponse> <params> <param> <value><double>18.24668429131</double></value> </param> </params> </methodResponse> 

В этом руководстве мы будем использовать PHP для отправки запросов XML-RPC в WordPress и отображения необработанного ответа.

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

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

Функции WordPress XML-RPC

Существует множество основных функций WordPress, которые WordPress предоставляет через XML-RPC. Все функции XML-RPC подразделяются на 9 категорий: сообщения, таксономии, медиа, комментарии, параметры, пользователи, категории, теги и страницы.

Список функций

Вот полный список всех функций:

Функции сообщений : доступно из WordPress 3.4. Вот список функций, которые относятся к категории сообщений:

 wp.getPost wp.getPosts wp.newPost wp.editPost wp.deletePost wp.getPostType wp.getPostTypes wp.getPostFormats wp.getPostStatusList 

Функции таксономии : доступно из WordPress 3.4. Вот список функций, которые относятся к категории таксономии:

 wp.getTaxonomy wp.getTaxonomies wp.getTerm wp.getTerms wp.newTerm wp.editTerm wp.deleteTerm 

Медиа-функции : доступны из WordPress 3.1. Вот список функций, которые относятся к категории таксономии:

 wp.getMediaItem wp.getMediaLibrary wp.uploadFile 

Функции комментариев : доступно из WordPress 2.7. Вот список функций, которые принадлежат категории комментариев:

 wp.getCommentCount wp.getComment wp.getComments wp.newComment wp.editComment wp.deleteComment wp.getCommentStatusList 

Функции функций : доступны из WordPress 2.6. Вот список функций, которые относятся к категории параметров:

 wp.getOptions wp.setOptions 

Функции пользователя : доступно из WordPress 3.5. Вот список функций, которые принадлежат категории пользователей:

 wp.getUsersBlogs wp.getUser wp.getUsers wp.getProfile wp.editProfile wp.getAuthors 

Функции категорий : доступны из WordPress 3.4. Вот список функций, которые принадлежат категории категории:

 wp.getCategories wp.suggestCategories wp.newCategory wp.deleteCategory 

Функции тегов : доступно из WordPress 3.4. Вот список функций, которые относятся к категории тегов:

 wp.getTags 

Функции страниц : доступно из WordPress 3.4. Вот список функций, которые относятся к категории страниц:

 wp.getPage wp.getPages wp.getPageList wp.newPage wp.editPage wp.deletePage wp.getPageStatusList wp.getPageTemplates 

Все названия категорий и имена функций, а также их использование и цели вполне понятны.

Давайте посмотрим несколько примеров вышеуказанных функций:

Получение списка авторов WordPress

Вот код для получения списка всех авторов удаленной установки WordPress с использованием PHP:

 <?php include("lib/xmlrpc.inc"); $function_name = "wp.getAuthors"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = "phpvals"; $message = new xmlrpcmsg($function_name, array(new xmlrpcval(0, "int"), new xmlrpcval("username", "string"), new xmlrpcval("password", "string"))); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else foreach ($resp->val as $key => $value) { echo "User id: " . $value["user_id"]; echo "<br><br>"; echo "Username: " . $value["user_login"]; echo "<br><br>"; echo "Display name: " . $value["display_name"]; echo "<br><br>"; }; ?> в <?php include("lib/xmlrpc.inc"); $function_name = "wp.getAuthors"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = "phpvals"; $message = new xmlrpcmsg($function_name, array(new xmlrpcval(0, "int"), new xmlrpcval("username", "string"), new xmlrpcval("password", "string"))); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else foreach ($resp->val as $key => $value) { echo "User id: " . $value["user_id"]; echo "<br><br>"; echo "Username: " . $value["user_login"]; echo "<br><br>"; echo "Display name: " . $value["display_name"]; echo "<br><br>"; }; ?> 

Давайте посмотрим, как работает приведенный выше код:

  • Сначала мы включили библиотеку PHPXMLRPC.
  • Затем мы создаем переменную $function_name для хранения имени функции.
  • Мы создали еще одну переменную, которая указывает на файл xmlrpc.php установки WordPress. Этот файл всегда существует в корне WordPress.
  • Затем мы создаем объект клиента XML-RPC и передаем URL конструктору.
  • Затем мы даем указание библиотеке преобразовать данные ответов в переменную массива PHP, чтобы их было легко читать и работать с данными ответов. Работать с необработанными данными ответов XML будет сложно, так как мы должны проанализировать XML.
  • Затем мы создаем объект сообщения запроса с параметрами для функции wp.getAuthors . Первый параметр — это идентификатор блога, два других параметра — это имя пользователя и пароль администратора.
  • Далее мы отправляем запрос XML-RPC.
  • Наконец мы получаем ответ. Если есть ошибка, мы отображаем ошибку, в противном случае мы зацикливаем свойство value объекта ответа, чтобы напечатать основную информацию авторов.

Создание сообщения

Мы только что увидели, как легко получить список авторов, вот как вы можете создать сообщение:

 <?php include("lib/xmlrpc.inc"); $function_name = "wp.newPost"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = 'phpvals'; $message = new xmlrpcmsg( $function_name, array( new xmlrpcval(0, "int"), new xmlrpcval("my_cool_username", "string"), new xmlrpcval("my_super_secret_password", "string"), new xmlrpcval( array( "post_type" => new xmlrpcval("post", "string"), "post_status" => new xmlrpcval("draft", "string"), "post_title" => new xmlrpcval("Sitepoint is Awesome", "string"), "post_author" => new xmlrpcval(1, "int"), "post_excerpt" => new xmlrpcval("excerpt", "string"), "post_content" => new xmlrpcval("content", "string") ), "struct" ) ) ); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else echo "Post id is: " . $resp->value(); ?> в <?php include("lib/xmlrpc.inc"); $function_name = "wp.newPost"; $url = "http://sitepoint.com/xmlrpc.php"; $client = new xmlrpc_client($url); $client->return_type = 'phpvals'; $message = new xmlrpcmsg( $function_name, array( new xmlrpcval(0, "int"), new xmlrpcval("my_cool_username", "string"), new xmlrpcval("my_super_secret_password", "string"), new xmlrpcval( array( "post_type" => new xmlrpcval("post", "string"), "post_status" => new xmlrpcval("draft", "string"), "post_title" => new xmlrpcval("Sitepoint is Awesome", "string"), "post_author" => new xmlrpcval(1, "int"), "post_excerpt" => new xmlrpcval("excerpt", "string"), "post_content" => new xmlrpcval("content", "string") ), "struct" ) ) ); $resp = $client->send($message); if ($resp->faultCode()) echo 'KO. Error: '.$resp->faultString(); else echo "Post id is: " . $resp->value(); ?> 

Здесь мы вызвали функцию wp.newPost . Вместе с идентификатором блога, именем пользователя и паролем. Мы также передали тип структуры, содержащий тип сообщения, статус, заголовок, содержание, автора и выдержку.

Примечание. Обнаружение запроса XML-RPC

Небольшое примечание: если вы разработчик плагинов или тем, вы можете захотеть, чтобы ваш код функционировал по-разному для запросов XML-RPC. WordPress позволяет темам и плагинам определять, обрабатывает ли WordPress запрос XML-RPC.

Вот код для обнаружения запросов XML-RPC:

 if(defined('XMLRPC_REQUEST')) { // XML-RPC request } else { // Normal HTTP request } 

Вывод

В этой статье мы рассмотрели основы XML-RPC для WordPress, включая основы XML-RPC и то, как WordPress раскрывает этот протокол. Мы также продемонстрировали, как выполнять различные операции при установке WordPress с использованием XML-RPC. Теперь вы можете создать XML-RPC-клиент для мобильных устройств, компьютеров или веб-приложений для WordPress.