WordPress come client XML-RPC?


13

Voglio sincronizzare le modifiche post su due siti. Ambiente di prova, non produzione. Direzione singola (dal sito A al sito B, ma non all'indietro).

Fondamentalmente, modifico il post nel mio stack di test locale e lo stesso post (parte del set di contenuti di test) sul server remoto dovrebbe essere aggiornato con una copia identica del contenuto risultante.

So che il server XML-RPC è implementato in WordPress ... Ma WordPress stesso non è un client XML-RPC e non ho idea di quanto sarebbe facile trasformarlo in uno (di solito sono diffidente nei confronti di XML-nulla :)

Quindi dovrei andare con XML-RPC e implementare la funzionalità client o che non vale la pena e dovrei creare un modulo personalizzato o qualcosa sul server remoto per rilevare le modifiche?


fetch_feed e l'utilizzo di Simple Pie potrebbero essere più facili da implementare.
Chris_O,

@Chris_O hmmm ... ma poi avrei bisogno di (1) generare feed con tutti i post sul sito (2) scansionare ogni post in quel feed per le modifiche ogni volta. (modifica) Fondamentalmente questa è la situazione pull (B tira da A) e penso di aver bisogno di push (A spinge verso B)
Rarst

Funzionerebbe per la cattura di nuovi post ma non molto efficiente per verificare le modifiche.
Chris_O,

@Chris_O non c'è alcuna condizione che io modifichi i post più recenti, al contrario - posso tornare indietro e modificare alcuni vecchi post se ho bisogno di cambiare i dati di test deprecati.
Rarst

Risposte:


13

WordPress ha già implementato una classe client XML-RPC. È nello stesso file della parte server: class-IXR.phpsituata in wp-includes.

Il seguente codice genererà un nuovo post. È possibile racchiuderlo in una funzione e collegarlo al hook save_post/ update_postaction. Per sincronizzare entrambe le parti, è possibile verificare il post-lumaca o inviare lo stesso ID post al post nel secondo blog.

$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();
}

Grazie, non avevo idea che in realtà mancasse il client e la rapida ricerca del Codex.
Rarst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.