WordPress jako klient XML-RPC?

13

Chcę zsynchronizować zmiany wpisów w dwóch witrynach. Środowisko testowe, a nie produkcja. Pojedynczy kierunek (strona A do strony B, ale nie do tyłu).

Zasadniczo edytuję post na moim lokalnym stosie testowym, a ten sam post (część zestawu zawartości testowej) na zdalnym serwerze powinien zostać zaktualizowany o identyczną kopię wynikowej zawartości.

Wiem, że serwer XML-RPC jest zaimplementowany w WordPress ... Ale sam WordPress nie jest klientem XML-RPC i nie mam pojęcia, jak łatwo byłoby go przekształcić w jeden (zwykle jestem ostrożny wobec XML-a :)

Czy powinienem więc skorzystać z XML-RPC i wdrożyć funkcjonalność klienta, czy nie jest to warte czasu i powinienem zbudować niestandardowy formularz lub coś na zdalnym serwerze, aby złapać zmiany?

Rarst
źródło
fetch_feed i użycie Simple Pie może być łatwiejsze do wdrożenia.
Chris_O
@Chris_O hmmm ... ale wtedy musiałbym (1) wygenerować kanał ze wszystkimi wpisami na stronie (2) skanować każdy wpis w tym kanale w poszukiwaniu zmian za każdym razem. (edytuj) Zasadniczo jest to sytuacja ściągania (B wyciąga z A) i myślę, że potrzebuję push (A przesuwa się do B)
Rarst
Sprawdziłby się w łapaniu nowych postów, ale niezbyt skuteczny w sprawdzaniu zmian.
Chris_O
@Chris_O nie ma warunku, że będę edytować nowe posty, wręcz przeciwnie - mogę wrócić i edytować niektóre stare posty, jeśli muszę zmienić przestarzałe dane testowe.
Rarst

Odpowiedzi:

13

WordPress ma już zaimplementowaną klasę klienta XML-RPC. Jest w tym samym pliku, co część serwerowa: class-IXR.phpznajduje się w wp-includes.

Poniższy kod wygeneruje nowy post. Możesz zawinąć to w funkcję i dołączyć do haka save_post/ update_postaction. Aby zsynchronizować obie części, możesz sprawdzić post-ślimak lub przesłać ten sam post-id do posta na drugim blogu.

$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
źródło
Dziękuję, nie miałem pojęcia, że ​​rzeczywiście ma klienta i szybkie wyszukiwanie w Kodeksie go ominęło.
Rarst