WordPress als XML-RPC-Client?

13

Ich möchte Post-Edits auf zwei Websites synchronisieren. Testumgebung, keine Produktion. Einzelne Richtung (Ort A zu Ort B, aber nicht rückwärts).

Grundsätzlich bearbeite ich Posts in meinem lokalen Teststack und derselbe Post (Teil des Testinhaltssatzes) auf dem Remote-Server sollte mit identischen Kopien des resultierenden Inhalts aktualisiert werden.

Ich weiß, dass der XML-RPC-Server in WordPress implementiert ist ... Aber WordPress selbst ist kein XML-RPC-Client, und ich habe keine Ahnung, wie einfach es wäre, ihn in einen zu verwandeln (ich bin normalerweise vorsichtig mit XML-irgendetwas :)

Sollte ich mich also für XML-RPC entscheiden und Client-Funktionen implementieren, oder ist das die Zeit nicht wert und ich sollte ein benutzerdefiniertes Formular oder etwas auf einem Remote-Server erstellen, um Änderungen zu erfassen?

Rarst
quelle
fetch_feed und die Verwendung von Simple Pie sind möglicherweise einfacher zu implementieren.
Chris_O
@Chris_O hmmm ... aber dann müsste ich (1) einen Feed mit allen Beiträgen vor Ort erstellen (2) jeden Beitrag in diesem Feed jedes Mal nach Änderungen durchsuchen. (edit) Grundsätzlich ist dies eine Pull- Situation (B zieht von A) und ich denke, ich brauche Push (A schiebt nach B)
Rarst
Es würde funktionieren, um neue Posts zu fangen, aber nicht sehr effizient, um nach Änderungen zu suchen.
Chris_O
@Chris_O Es gibt keine Bedingung, dass ich neuere Beiträge bearbeite, im Gegenteil - ich kann zurückgehen und einen alten Beitrag bearbeiten, wenn ich veraltete Testdaten ändern muss.
Rarst

Antworten:

13

In WordPress ist bereits eine XML-RPC-Client-Klasse implementiert. Es befindet sich in derselben Datei wie der Serverteil: befindet class-IXR.phpsich in wp-includes.

Der folgende Code generiert einen neuen Beitrag. Sie können dies in eine Funktion einbinden und an den save_post/ update_postaction-Hook anhängen . Um beide Teile zu synchronisieren, können Sie nach dem Post-Slug suchen oder dieselbe Post-ID an den Post im zweiten Blog senden.

$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
quelle
Vielen Dank, ich hatte keine Ahnung, dass es tatsächlich einen Client gibt und die schnelle Codex-Suche hat es verpasst.
Rarst