WordPress en tant que client XML-RPC?

13

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

Fondamentalement, je modifie le post sur ma pile de test locale et le même post (partie de l'ensemble de contenu de test) sur le serveur distant doit être mis à jour avec une copie identique du contenu résultant.

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 n'ai aucune idée de la facilité avec laquelle il serait possible d'en faire un (je me méfie généralement de XML-n'importe quoi :)

Alors, dois-je utiliser XML-RPC et implémenter la fonctionnalité client ou cela ne vaut pas le temps et je dois créer un formulaire personnalisé ou quelque chose sur un serveur distant pour attraper les changements?

Rarst
la source
fetch_feed et l'utilisation de Simple Pie pourraient être plus faciles à implémenter.
Chris_O
@Chris_O hmmm ... mais alors je devrais (1) générer un flux avec toutes les publications sur le site (2) analyser chaque publication dans ce flux pour des changements à chaque fois. (modifier) ​​Fondamentalement, c'est une situation de traction (B tire de A) et je pense que j'ai besoin de pousser (A pousse vers B)
Rarst
Cela fonctionnerait pour attraper de nouveaux messages mais pas très efficace pour vérifier les changements.
Chris_O
@Chris_O il n'y a pas de condition que je modifie les nouveaux messages, au contraire - je peux revenir en arrière et modifier certains anciens messages si j'ai besoin de modifier les données de test obsolètes.
Rarst

Réponses:

13

WordPress a déjà une classe client XML-RPC implémentée. C'est dans le même fichier que la partie serveur: class-IXR.phpsitué dans wp-includes.

Le code suivant va générer une nouvelle publication. Vous pouvez envelopper cette fonction dans une fonction et l'attacher au crochet save_post/ update_postaction. Pour synchroniser les deux parties, vous pouvez vérifier le post-slug ou soumettre le même post-id au post dans le 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();
}
rofflox
la source
Merci, je ne savais pas qu'il avait réellement un client et la recherche rapide du Codex l'a raté.
Rarst