WordPress como cliente XML-RPC?

13

Quero sincronizar edições de post em dois sites. Ambiente de teste, não produção. Direção única (site A para site B, mas não para trás).

Basicamente, edito a postagem na minha pilha de teste local e a mesma postagem (parte do conjunto de conteúdo de teste) no servidor remoto deve ser atualizada com cópia idêntica do conteúdo resultante.

Eu sei que o servidor XML-RPC é implementado no WordPress ... Mas o WordPress em si não é um cliente XML-RPC e não tenho idéia de como seria fácil transformá-lo em um (eu geralmente desconfio de XML qualquer coisa :)

Portanto, devo usar o XML-RPC e implementar a funcionalidade do cliente ou isso não vale o tempo e criar um formulário personalizado ou algo no servidor remoto para capturar alterações?

Rarst
fonte
fetch_feed e o uso do Simple Pie pode ser mais fácil de implementar.
314 Chris_O
@Chris_O hmmm ... mas então eu precisaria (1) gerar feed com todas as postagens no site (2) verificar todas as postagens nesse feed em busca de alterações sempre. (edit) Basicamente, este é puxar situação (puxa B de A) e eu acho que eu preciso empurrar (empurra um para B)
Rarst
Isso funcionaria para capturar novas postagens, mas não muito eficiente para verificar alterações.
31411 Chris_O
@ Chris_O, não há condição de editar postagens mais recentes, pelo contrário - posso voltar e editar uma postagem antiga se precisar alterar dados de teste obsoletos.
Rarst

Respostas:

13

O WordPress já possui uma classe de cliente XML-RPC implementada. Está no mesmo arquivo que a parte do servidor: class-IXR.phplocalizada em wp-includes.

O código a seguir irá gerar uma nova postagem. Você pode agrupar isso em uma função e anexá-lo ao gancho save_post/ update_postação. Para sincronizar as duas partes, você pode verificar a pós-lesma ou enviar o mesmo ID da postagem para a postagem no 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
fonte
Obrigado, eu não tinha ideia de que ele realmente tem cliente e a pesquisa rápida do Codex não atendeu.
Rarst