WordPress เป็นลูกค้า XML-RPC?


13

ฉันต้องการซิงค์การแก้ไขโพสต์ในสองไซต์ ทดสอบสภาพแวดล้อมไม่ใช่การผลิต ทิศทางเดียว (ไซต์ A ไปยังไซต์ B แต่ไม่ย้อนกลับ)

โดยทั่วไปฉันแก้ไขโพสต์ที่สแต็คการทดสอบในเครื่องและโพสต์เดียวกัน (ส่วนหนึ่งของชุดเนื้อหาทดสอบ) ที่เซิร์ฟเวอร์ระยะไกลควรได้รับการอัพเดตพร้อมสำเนาเนื้อหาผลลัพธ์ที่เหมือนกัน

ฉันรู้ว่าเซิร์ฟเวอร์ XML-RPC มีการใช้งานใน WordPress ... แต่ WordPress เองไม่ได้เป็นไคลเอนต์ XML-RPC และฉันไม่รู้ว่ามันจะง่ายแค่ไหนในการทำให้เป็นหนึ่งเดียว (ฉันมักจะกังวลกับ XML)

ดังนั้นฉันควรไปกับ XML-RPC และใช้ฟังก์ชั่นไคลเอนต์หรือไม่คุ้มค่ากับเวลาและฉันควรสร้างฟอร์มที่กำหนดเองหรือบางสิ่งบางอย่างที่เซิร์ฟเวอร์ระยะไกลเพื่อตรวจจับการเปลี่ยนแปลง?


fetch_feed และการใช้ Simple Pie อาจทำได้ง่ายกว่า
Chris_O

@Chris_O hmmm ... แต่แล้วฉันจะต้อง (1) สร้างฟีดพร้อมโพสต์ทั้งหมดในเว็บไซต์ (2) สแกนโพสต์ในฟีดนั้นเพื่อให้มีการเปลี่ยนแปลงทุกครั้ง (แก้ไข) โดยทั่วไปนี่คือสถานการณ์การดึง (B ดึงออกจาก A) และฉันคิดว่าฉันต้องการการผลักดัน (A ผลักไปที่ B)
Rarst

มันจะทำงานสำหรับการโพสต์ใหม่ แต่ไม่ได้มีประสิทธิภาพมากสำหรับการตรวจสอบการเปลี่ยนแปลง
Chris_O

@Chris_O ไม่มีเงื่อนไขที่ฉันจะแก้ไขโพสต์ใหม่ในทางตรงกันข้าม - ฉันสามารถย้อนกลับไปแก้ไขโพสต์เก่า ๆ ได้หากฉันต้องการเปลี่ยนข้อมูลการทดสอบที่เลิกใช้แล้ว
Rarst

คำตอบ:


13

WordPress ได้นำคลาสไคลเอนต์ XML-RPC ไปใช้งานแล้ว มันอยู่ในไฟล์เดียวกันเป็นส่วนหนึ่งเซิร์ฟเวอร์: ตั้งอยู่ในclass-IXR.phpwp-includes

รหัสต่อไปนี้จะสร้างโพสต์ใหม่ คุณสามารถห่อสิ่งนี้ในฟังก์ชั่นและแนบไปกับsave_post/ update_postaction hook หากต้องการซิงค์ทั้งสองส่วนคุณสามารถตรวจสอบ post-slug หรือส่ง post-id เดียวกันกับโพสต์ในบล็อกที่สอง

$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();
}

ขอบคุณฉันไม่รู้ว่าจริงๆแล้วมันมีลูกค้าและการค้นหา Codex อย่างรวดเร็วไม่ได้รับ
Rarst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.