XML-RPC — это протокол для удаленных вызовов процедур, который использует XML для обмена данными и в основном использует HTTP для фактического вызова. В XML-RPC клиент, который хочет сделать вызов удаленному методу, создает входные параметры в форме XML и отправляет их через HTTP-запрос на удаленный сервер, реализующий протокол XML-RPC. Удаленный сервер, реализующий протокол XML-RPC, получает запрос, а затем выполняет удаленный метод и возвращает результат обратно в формате XML.
В этой статье мы рассмотрим, как вызывать методы в вашей установке WordPress с использованием XML-RPC.
Шаг 1 Понимание XML-RPC в WordPress
WordPress — это полноценная блог-платформа. Он сделан очень настраиваемым и открыт для других систем для подключения и связи с ним. XML-RPC в WordPress помогает этой открытости WordPress, позволяя другим системам или программному обеспечению выполнять операции по установке WordPress даже удаленно. Таким образом, с помощью WordPress XML-RPC можно создавать клиенты блогов WordPress, некоторые другие программы, которые выполняют некоторые пакетные задачи, такие как создание нескольких записей из файла и т. Д.
Шаг 2 Включение поддержки XML-RPC на вашей установке WordPress
По умолчанию XML-RPC не включен в вашей установке WordPress. Таким образом, чтобы ваша установка WordPress могла обслуживать запросы XML-RPC, вы должны включить эту функцию на своем веб-сайте.
Чтобы включить эту функцию, вам нужно перейти в раздел администратора. Там, в Настройки -> Запись, вы должны будете включить опцию XML-RPC, как показано ниже.
Шаг 3 Знание файлов и классов в WordPress, которые делают возможным XML-RPC
Все запросы XML-RPC отправляются в файл xmlrpc.php, который находится в вашем основном каталоге установки WordPress. Файл в основном выполняет начальную загрузку для загрузки среды WordPress, а затем создает объект класса wp_xmlrpc_server
который находится в расположении wp-includes / class-wp-xmlrpc-server.php .
Класс wp_xmlrpc_server
отвечает за обработку всех запросов XML-RPC, поступающих от клиентов XML-RPC.
Шаг 4. Знание различных типов API, поддерживаемых WordPress XML-RPC Server.
WordPress XML-RPC-сервер поддерживает несколько типов API для XML-RPC. Ниже приведены типы API, которые поддерживает сервер WordPress XML-RPC:
- WordPress API
- Blogger API
- MetaWeblog API
- API MovableType
- PingBack API
Хотя документации по этому вопросу wp_xmlrpc_server
, краткий wp_xmlrpc_server
класса wp_xmlrpc_server
поможет узнать точное имя API, поддерживаемых сервером WordPress XML-RPC.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
function wp_xmlrpc_server() {
$this->methods = array(
// WordPress API
‘wp.getUsersBlogs’ => ‘this:wp_getUsersBlogs’,
‘wp.getPage’ => ‘this:wp_getPage’,
‘wp.getPages’ => ‘this:wp_getPages’,
‘wp.newPage’ => ‘this:wp_newPage’,
‘wp.deletePage’ => ‘this:wp_deletePage’,
‘wp.editPage’ => ‘this:wp_editPage’,
‘wp.getPageList’ => ‘this:wp_getPageList’,
‘wp.getAuthors’ => ‘this:wp_getAuthors’,
‘wp.getCategories’ => ‘this:mw_getCategories’, // Alias
‘wp.getTags’ => ‘this:wp_getTags’,
‘wp.newCategory’ => ‘this:wp_newCategory’,
‘wp.deleteCategory’ => ‘this:wp_deleteCategory’,
‘wp.suggestCategories’ => ‘this:wp_suggestCategories’,
‘wp.uploadFile’ => ‘this:mw_newMediaObject’, // Alias
‘wp.getCommentCount’ => ‘this:wp_getCommentCount’,
‘wp.getPostStatusList’ => ‘this:wp_getPostStatusList’,
‘wp.getPageStatusList’ => ‘this:wp_getPageStatusList’,
‘wp.getPageTemplates’ => ‘this:wp_getPageTemplates’,
‘wp.getOptions’ => ‘this:wp_getOptions’,
‘wp.setOptions’ => ‘this:wp_setOptions’,
‘wp.getComment’ => ‘this:wp_getComment’,
‘wp.getComments’ => ‘this:wp_getComments’,
‘wp.deleteComment’ => ‘this:wp_deleteComment’,
‘wp.editComment’ => ‘this:wp_editComment’,
‘wp.newComment’ => ‘this:wp_newComment’,
‘wp.getCommentStatusList’ => ‘this:wp_getCommentStatusList’,
‘wp.getMediaItem’ => ‘this:wp_getMediaItem’,
‘wp.getMediaLibrary’ => ‘this:wp_getMediaLibrary’,
‘wp.getPostFormats’ => ‘this:wp_getPostFormats’,
// Blogger API
‘blogger.getUsersBlogs’ => ‘this:blogger_getUsersBlogs’,
‘blogger.getUserInfo’ => ‘this:blogger_getUserInfo’,
‘blogger.getPost’ => ‘this:blogger_getPost’,
‘blogger.getRecentPosts’ => ‘this:blogger_getRecentPosts’,
‘blogger.getTemplate’ => ‘this:blogger_getTemplate’,
‘blogger.setTemplate’ => ‘this:blogger_setTemplate’,
‘blogger.newPost’ => ‘this:blogger_newPost’,
‘blogger.editPost’ => ‘this:blogger_editPost’,
‘blogger.deletePost’ => ‘this:blogger_deletePost’,
// MetaWeblog API (with MT extensions to structs)
‘metaWeblog.newPost’ => ‘this:mw_newPost’,
‘metaWeblog.editPost’ => ‘this:mw_editPost’,
‘metaWeblog.getPost’ => ‘this:mw_getPost’,
‘metaWeblog.getRecentPosts’ => ‘this:mw_getRecentPosts’,
‘metaWeblog.getCategories’ => ‘this:mw_getCategories’,
‘metaWeblog.newMediaObject’ => ‘this:mw_newMediaObject’,
// MetaWeblog API aliases for Blogger API
// see http://www.xmlrpc.com/stories/storyReader$2460
‘metaWeblog.deletePost’ => ‘this:blogger_deletePost’,
‘metaWeblog.getTemplate’ => ‘this:blogger_getTemplate’,
‘metaWeblog.setTemplate’ => ‘this:blogger_setTemplate’,
‘metaWeblog.getUsersBlogs’ => ‘this:blogger_getUsersBlogs’,
// MovableType API
‘mt.getCategoryList’ => ‘this:mt_getCategoryList’,
‘mt.getRecentPostTitles’ => ‘this:mt_getRecentPostTitles’,
‘mt.getPostCategories’ => ‘this:mt_getPostCategories’,
‘mt.setPostCategories’ => ‘this:mt_setPostCategories’,
‘mt.supportedMethods’ => ‘this:mt_supportedMethods’,
‘mt.supportedTextFilters’ => ‘this:mt_supportedTextFilters’,
‘mt.getTrackbackPings’ => ‘this:mt_getTrackbackPings’,
‘mt.publishPost’ => ‘this:mt_publishPost’,
// PingBack
‘pingback.ping’ => ‘this:pingback_ping’,
‘pingback.extensions.getPingbacks’ => ‘this:pingback_extensions_getPingbacks’,
‘demo.sayHello’ => ‘this:sayHello’,
‘demo.addTwoNumbers’ => ‘this:addTwoNumbers’
);
|
Шаг 5 Создание класса XMLRPClientWordPress
в PHP
Теперь мы собираемся создать класс XMLRPClientWordPress
в PHP, который будет предоставлять функции для выполнения различных операций в вашей установке WordPress через вызовы XML-RPC.
1
2
3
4
5
|
class XMLRPClientWordPress
{
var $XMLRPCURL = «»;
var $UserName = «»;
var $PassWord = «»;
|
Сначала мы создадим класс и в нем будет три члена для хранения значения URL-адреса XML-RPC установки WordPress, а также имени пользователя и пароля установки.
URL-адрес XML-PRC: http://yourwordpressinstall.com/xmlrpc.php , а имя пользователя и пароль — это имя пользователя и пароль пользователя блога с соответствующим доступом.
Затем мы создадим конструктор, который будет принимать эти значения и сохранять их в членах класса следующим образом.
1
2
3
4
5
6
7
|
// Constructor
public function __construct($xmlrpcurl, $username, $password)
{
$this->XMLRPCURL = $xmlrpcurl;
$this->UserName = $username;
$this->PassWord = $password;
}
|
Затем мы создадим функцию send_request
которая будет принимать имя запроса и параметры запроса в качестве входных данных. Затем функция создаст запрос XML из входных параметров, а затем отправит запрос на URL-адрес установки XML-RPC WordPress и вернет результаты.
Функция выглядит следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
|
function send_request($requestname, $params)
{
$request = xmlrpc_encode_request($requestname, $params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $this->XMLRPCURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$results = curl_exec($ch);
curl_close($ch);
return $results;
}
|
Эта функция использует функцию PHP xmlrpc_encode_request
которая создает запрос XML, затем мы используем curl для отправки запроса по URL-адресу XML-RPC установки WordPress, хранящейся в переменной члена класса.
Затем эта функция возвращает результат, полученный с сервера XML-RPC.
Шаг 6 Отправка первого запроса SayHello
XML-RPC на установку WordPress
Чтобы проверить, можем ли мы правильно вызывать методы на сервере установки WordPress, мы demo.sayHello
метод demo.sayHello
, он не принимает параметров и который при правильной работе XML-RPC-сервера WordPress возвращает строку «Hello!».
Функция для вызова demo.sayHello
выглядит следующим образом:
1
2
3
4
5
|
function sayHello()
{
$params = array();
return $this->send_request(‘demo.sayHello’,$params);
}
|
По сути, поскольку метод demo.sayHello
не принимает никаких параметров, мы отправляем пустой массив в качестве параметра, а затем вызываем send_request
, передавая имя запроса как demo.sayHello
.
Для вызова этой функции вам необходимо создать объект класса XMLRPClientWordPress
следующим образом:
1
|
$objXMLRPClientWordPress = new XMLRPClientWordPress(«http://localhost/wordpress31/xmlrpc.php» , «admin» , «abbas»);
|
А затем позвоните:
1
|
$objXMLRPClientWordPress->sayHello()
|
Вывод этого будет следующим:
Если вы получаете тот же результат, это означает, что вы можете правильно отправить запрос на ваш XML-RPC-сервер WordPress и правильно получить запрос.
Теперь вы можете выполнить немного более сложную операцию с использованием XML-RPC в вашей установке WordPress.
Шаг 7 Создание публикации блога с использованием XML-RPC
Теперь давайте создадим функцию, которая будет создавать пост в блоге через XML-RPC.
Имя запроса для создания поста — metaWeblog.newPost
который на самом деле является частью API MetaWeblog, поддерживаемого WordPress.
Аргументы, необходимые для этого запроса, являются
-
blogid
(который равен 0, если в вашей установке только один блог) -
username
-
password
- Структура контента поста, т.е. различная информация о посте, такая как
title
,content
,categories
и т. Д. -
publish
то естьpublish
ли пост
Функция create_post
выглядит следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
function create_post($title,$body,$category,$keywords=»,$encoding=’UTF-8′)
{
$title = htmlentities($title,ENT_NOQUOTES,$encoding);
$keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);
$content = array(
‘title’ => $title,
‘description’ => $body,
‘mt_allow_comments’ => 0, // 1 to allow comments
‘mt_allow_pings’ => 0, // 1 to allow trackbacks
‘post_type’ => ‘post’,
‘mt_keywords’ => $keywords,
‘categories’ => array($category)
);
$params = array(0,$this->UserName,$this->PassWord,$content,true);
return $this->send_request(‘metaWeblog.newPost’,$params);
}
|
Эта функция принимает заголовок, тело, категории и т. Д. В качестве входных аргументов. Затем он создает структуру содержимого из этих аргументов и устанавливает некоторые значения по умолчанию.
Затем мы создадим массив параметров из имени пользователя, пароля, ранее переданного в конструкторе, и из массива содержимого, который мы сделали из входных параметров.
Эта функция может быть вызвана следующим образом.
1
|
$objXMLRPClientWordPress->create_post(‘Hello WordPress XML-RPC’, ‘This is the content of post done via XML-RPC’,»);
|
Идентификатор вновь созданного сообщения — это значение, возвращаемое этим API. Если мы создадим таблицу из API и выведем ее результаты, она будет выглядеть следующим образом.
Если мы пойдем и увидим установку WordPress, пост будет выглядеть следующим образом
Шаг 8 Создание страницы вашего блога с использованием XML-RPC
Теперь мы создадим страницу по установке WordPress с использованием XML-RPC. Запрос на создание страницы — это wp.newPage
который на самом деле является частью WordPress API.
Аргументы для этого такие же, как и для создания запроса на публикацию.
Ниже create_page
функция create_page
:
01
02
03
04
05
06
07
08
09
10
11
12
|
function create_page($title,$body,$encoding=’UTF-8′)
{
$title = htmlentities($title,ENT_NOQUOTES,$encoding);
$content = array(
‘title’ => $title,
‘description’ => $body
);
$params = array(0,$this->UserName,$this->PassWord,$content,true);
return $this->send_request(‘wp.newPage’,$params);
}
|
Это в основном принимает заголовок и тело в качестве входных данных, а затем создает параметры, необходимые для запроса, а затем отправляет запрос.
Мы будем вызывать функцию следующим образом
1
|
$objXMLRPClientWordPress->create_page(‘WordPress XML-RPC page’, ‘This is the content of First Page done via XML-RPC’);
|
А затем позвоните:
1
|
$objXMLRPClientWordPress->sayHello()
|
Возвратом для этого запроса является идентификатор страницы вновь созданной страницы. Теперь, если мы запустим эту функцию и проверим нашу установку WordPress, вновь созданная страница будет выглядеть следующим образом.
Шаг 9 Получение списка авторов блога с использованием XML-RPC
Теперь мы создадим функцию для получения списка авторов из вашей установки WordPress через XML-RPC. Запрос на получение списка авторов — это wp.getAuthors
который также является частью WordPress API.
Параметры для этого запроса следующие:
-
blogid
(который равен 0, если в вашей установке только один блог) -
username
-
password
Функция display_authors
выглядит следующим образом:
1
2
3
4
5
|
function display_authors()
{
$params = array(0,$this->UserName,$this->PassWord);
return $this->send_request(‘wp.getAuthors’,$params);
}
|
Он не принимает никаких параметров, просто использует сохраненные имя пользователя и пароль для отправки запроса. Вывод этой функции представляет собой строку с информацией об авторах всех авторов в блоге.
Мы можем вызвать эту функцию следующим образом:
1
|
$objXMLRPClientWordPress->display_authors();
|
Ниже приведена таблица, созданная на основе запросов и ответов различных запросов в этом руководстве.
Шаг 10. Знание некоторых других важных операций, поддерживаемых WordPress XML-RPC.
Как и другие обсуждаемые запросы, WordPress поддерживает практически все важные операции, которые можно выполнять в WordPress.
Есть запросы на поддержку
- Создание, редактирование, удаление страниц и постов
- Создание, редактирование, удаление комментариев
- Список авторов и подробности блога
- Для получения последних сообщений и списка категорий
И многое другое поддерживается.
Вывод
Поддержка XML-RPC в WordPress позволяет писать другое программное обеспечение или сценарии, которые могут автоматизировать задачи в вашей установке WordPress или другое клиентское программное обеспечение для удаленного выполнения задач.
Такие функции, как XML-RPC, помогают WordPress быть очень открытой и расширяемой платформой. Так что счастливого ведения блога с WordPress!
У вас есть конкретная задача, для которой вы хотели бы использовать XML-RPC? Есть ли конкретное программное обеспечение, которое вы хотели бы использовать с WordPress, использующее XML-RPC? Дайте нам знать в комментариях ниже!