WordPress sebagai klien XML-RPC?

13

Saya ingin menyinkronkan pengeditan pos di dua situs. Uji lingkungan, bukan produksi. Arah tunggal (situs A ke situs B, tetapi tidak mundur).

Pada dasarnya saya mengedit posting di tumpukan tes lokal saya dan posting yang sama (bagian dari set konten pengujian) di server jauh harus diperbarui dengan salinan identik dari konten yang dihasilkan.

Saya tahu bahwa server XML-RPC diimplementasikan di WordPress ... Tapi WordPress itu sendiri bukan klien XML-RPC dan saya tidak tahu betapa mudahnya untuk membuatnya menjadi satu (saya biasanya waspada terhadap XML-apa saja :)

Jadi haruskah saya menggunakan XML-RPC dan mengimplementasikan fungsionalitas klien atau yang tidak sepadan dengan waktu dan saya harus membangun formulir kustom atau sesuatu di server jauh untuk menangkap perubahan?

Jarang
sumber
fetch_feed dan menggunakan Simple Pie mungkin lebih mudah diterapkan.
Chris_O
@ Chris_O hmmm ... tapi kemudian saya perlu (1) menghasilkan feed dengan semua posting di situs (2) memindai setiap posting di feed itu untuk perubahan setiap waktu. (sunting) Pada dasarnya ini adalah situasi tarikan (B menarik dari A) dan saya pikir saya perlu mendorong (A mendorong ke B)
Rarst
Ini akan berhasil untuk menangkap posting baru tetapi tidak terlalu efisien untuk memeriksa perubahan.
Chris_O
@ Chris_O tidak ada syarat bahwa saya akan mengedit posting yang lebih baru, sebaliknya - saya dapat kembali dan mengedit beberapa posting lama jika saya perlu mengubah data pengujian yang sudah tidak berlaku.
Jarang

Jawaban:

13

WordPress sudah menerapkan kelas klien XML-RPC. Ada dalam file yang sama dengan bagian server: class-IXR.phpterletak di wp-includes.

Kode berikut akan menghasilkan posting baru. Anda bisa membungkus ini dalam suatu fungsi dan melampirkannya ke save_post/ update_postaction hook. Untuk menyinkronkan kedua bagian, Anda dapat memeriksa post-slug atau mengirim post-id yang sama ke posting di blog kedua.

$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
sumber
Terima kasih, saya tidak tahu itu benar-benar memiliki klien dan pencarian Codex cepat melewatkannya.
Rarst