web-dev-qa-db-fra.com

WordPress en tant que client XML-RPC?

Je souhaite synchroniser les modifications de publication sur deux sites. Environnement de test, pas de production. Direction unique (site A à site B, mais pas à l'envers).

Fondamentalement, je modifie un message sur ma pile de test locale et le même message (faisant partie du contenu du test) sur le serveur distant doit être mis à jour avec une copie identique du contenu obtenu.

Je sais que le serveur XML-RPC est implémenté dans WordPress ... Mais WordPress lui-même n'est pas un client XML-RPC et je ne sais pas à quel point il serait facile d'en faire un (je me méfie généralement de XML-n'importe quoi :)

Donc, devrais-je utiliser XML-RPC et implémenter la fonctionnalité client ou cela ne vaut pas la peine, et je devrais créer un formulaire personnalisé ou quelque chose sur un serveur distant pour intercepter les modifications?

12
Rarst

WordPress a déjà une classe de client XML-RPC implémentée. Il se trouve dans le même fichier que la partie serveur: class-IXR.php situé dans wp-includes.

Le code suivant va générer un nouveau message. Vous pouvez envelopper ceci dans une fonction et l'attacher au hook d'action save_post/update_post. Pour synchroniser les deux parties, vous pouvez rechercher le post-slug ou soumettre le même post-id à la publication du deuxième 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();
}
13
rofflox