WordPress як клієнт XML-RPC?


13

Я хочу синхронізувати редагування публікацій на двох сайтах. Тестове середовище, а не виробництво. Односторонній напрямок (сайт А до сайту Б, але не назад).

В основному я редагую публікацію у своєму локальному тестовому стеку, а ту саму публікацію (частина набору тестового вмісту) на віддаленому сервері слід оновлювати однаковою копією отриманого вмісту.

Я знаю, що сервер XML-RPC реалізований в WordPress ... Але сам WordPress не є клієнтом XML-RPC, і я не маю уявлення, як легко було б перетворити його в один (я зазвичай насторожено ставився до XML-нічого :)

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


fetch_feed та використання Simple Pie може бути простішим у виконанні.
Chris_O

@Chris_O hmmm ... але тоді мені потрібно (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();
}

Дякую, я не мав уявлення, що насправді це клієнт, і швидкий пошук Codex пропустив його.
Рарст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.