WordPress como cliente XML-RPC?

13

Quiero sincronizar las ediciones de publicaciones en dos sitios. Entorno de prueba, no producción. Dirección única (sitio A al sitio B, pero no al revés).

Básicamente, edito la publicación en mi pila de prueba local y la misma publicación (parte del conjunto de contenido de prueba) en el servidor remoto debe actualizarse con una copia idéntica del contenido resultante.

Sé que el servidor XML-RPC se implementa en WordPress ... Pero WordPress en sí no es un cliente XML-RPC y no tengo idea de lo fácil que sería convertirlo en uno (generalmente desconfío de XML-cualquier cosa :)

Entonces, ¿debo usar XML-RPC e implementar la funcionalidad del cliente o eso no vale la pena y debo crear un formulario personalizado o algo en el servidor remoto para detectar los cambios?

Rarst
fuente
fetch_feed y usar Simple Pie podría ser más fácil de implementar.
Chris_O
@Chris_O hmmm ... pero luego necesitaría (1) generar un feed con todas las publicaciones en el sitio (2) escanear cada publicación en ese feed para ver los cambios cada vez. (editar) Básicamente esta es una situación de atracción (B tira de A) y creo que necesito empujar (A empuja a B)
Rarst
Funcionaría para capturar nuevas publicaciones, pero no es muy eficiente para verificar los cambios.
Chris_O
@Chris_O no existe la condición de que edite publicaciones más nuevas, por el contrario, puedo volver y editar alguna publicación antigua si necesito cambiar los datos de prueba obsoletos.
Rarst

Respuestas:

13

WordPress ya tiene implementada una clase de cliente XML-RPC. Está en el mismo archivo que la parte del servidor: class-IXR.phpubicado en wp-includes.

El siguiente código generará una nueva publicación. Puede envolver esto en una función y adjuntarlo al gancho save_post/ update_postaction. Para sincronizar ambas partes, puede verificar el post-slug o enviar el mismo post-id a la publicación en el segundo 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();
}
rofflox
fuente
Gracias, no tenía idea de que realmente tiene cliente y la búsqueda rápida de Codex se lo perdió.
Rarst