WordPress как XML-RPC клиент?

13

Я хочу синхронизировать изменения на двух сайтах. Тестовая среда, а не производство. Одиночное направление (с сайта A на сайт B, но не в обратном направлении).

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

Я знаю, что сервер XML-RPC реализован в WordPress ... Но сам WordPress не является клиентом XML-RPC, и я понятия не имею, насколько легко было бы сделать его одним (я обычно опасаюсь XML-чего угодно :)

Так стоит ли мне использовать XML-RPC и реализовать функциональность клиента, или это не стоит времени, и мне нужно создать пользовательскую форму или что-то на удаленном сервере, чтобы ловить изменения?

Rarst
источник
fetch_feed и использование Simple Pie может быть проще в реализации.
Chris_O
@Chris_O хммм ... но тогда мне нужно (1) создать фид со всеми постами на сайте (2) просканировать каждый пост в этом фиде на предмет изменений каждый раз. (править) По сути, это ситуация вытягивания (B вытягивает из A), и я думаю, что мне нужно подтолкнуть (A подталкивает к B)
Rarst
Это будет работать для получения новых сообщений, но не очень эффективно для проверки изменений.
Chris_O
@Chris_O нет условия, чтобы я редактировал новые посты, наоборот - я могу вернуться и отредактировать старый пост, если мне нужно изменить устаревшие тестовые данные.
августа

Ответы:

13

В WordPress уже реализован клиентский класс XML-RPC. Он находится в том же файле, что и серверная часть: class-IXR.phpрасположен в wp-includes.

Следующий код создаст новый пост. Вы можете обернуть это в функцию и прикрепить к хуку save_post/ update_postaction. Чтобы синхронизировать обе части, вы можете проверить наличие пост-слаг или отправить тот же идентификатор поста на пост во втором блоге.

$rpc = new IXR_Client('http://second-blog-domain.tld/path/to/wp/xmlrpc.php');

$post = array(
    'title' => 'Post Title',
    'categories' => array('Category A', 'Category B'),
    'mt_keywords' => 'tagA, tagB, tagC',
    'description' => 'Post Content',
    'wp_slug' => 'post-slug'
);

$params = array(
    0,
    'username',
    'password',
    $post,
    'publish'
);

$status = $rpc->query(
    'metaWeblog.newPost',
    $params
);

if(!$status) {
    echo 'Error [' . $rpc->getErrorCode() . ']: ' . $rpc->getErrorMessage();
    exit();
}
rofflox
источник
Спасибо, я понятия не имел, что на самом деле есть клиент, и быстрый поиск по Кодексу пропустил его.
1