XML-RPC istemcisi olarak WordPress?


13

İki sitede yayın düzenlemelerini senkronize etmek istiyorum. Test ortamı, üretim değil. Tek yön (A bölgesi B yerine, ancak geriye değil).

Temel olarak yerel test yığınımdaki yazıyı düzenliyorum ve uzak sunucudaki aynı yazının (test içeriği kümesinin bir parçası) sonuçtaki içeriğin aynı kopyasıyla güncellenmesi gerekiyor.

XML-RPC sunucusunun WordPress'te uygulandığını biliyorum ... Ama WordPress'in kendisi bir XML-RPC istemcisi değil ve bir tane haline getirmenin ne kadar kolay olacağı hakkında hiçbir fikrim yok (genellikle XML'den her şeye dikkat ediyorum :)

Bu yüzden XML-RPC ile gidip istemci işlevselliğini uygulamalıyım ya da zaman ayırmaya değer değil ve değişiklikleri yakalamak için uzak sunucuda özel bir form ya da bir şey oluşturmalıyım?


fetch_feed ve Simple Pie kullanmak daha kolay olabilir.
— Chris_O

@Chris_O hmmm ... ama sonra (1) sitedeki tüm yayınlarla yayın oluşturmam gerekirdi (2) her zaman değişiklikler için o yayındaki her yazıyı tara. Temelde bu çekme durumudur (B A'dan çeker) ve sanırım itmeye ihtiyacım var (A B'ye itiyor)
— Rarst

Yeni yayınlar yakalamak için işe yarayacaktı, ancak değişiklikleri kontrol etmek için çok verimli değildi.
— Chris_O

@Chris_O, daha yeni yayınları düzenlemem için bir koşul yok, aksine - Kullanım dışı test verilerini değiştirmem gerekirse geri dönüp bazı eski yayınları düzenleyebilirim.
— Nadir

Yanıtlar:


13

WordPress'te zaten bir XML-RPC istemci sınıfı uygulanmıştır. Bulunan sunucu bölümü ile aynı dosyada class-IXR.phpbulunur wp-includes.

Aşağıdaki kod yeni bir yazı oluşturur. Bunu bir işleve sarabilir ve save_post/ update_postaction hook'a ekleyebilirsiniz . Her iki parçayı da senkronize etmek için post-slug olup olmadığını kontrol edebilir veya aynı blog numarasını ikinci blogdaki gönderiye gönderebilirsiniz.

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

Teşekkür ederim, aslında istemci ve hızlı Codex arama kaçırdı hiçbir fikrim yoktu.
— Rarst
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.