既然您添加了对我之前答案的引用,那么让我分享一下我是如何测试它的:
站点A上的安装程序-XML-RPC客户端
include_once( ABSPATH . WPINC . \'/class-IXR.php\' );
include_once( ABSPATH . WPINC . \'/class-wp-http-ixr-client.php\' );
$client = new WP_HTTP_IXR_CLIENT( \'http://example.tld/xmlrpc.php\' ); // <-- Change!
$client->debug = true;
$result = $client->query(
\'wp.newPost\',
[
0,
"username", //<-- Change!
"password", //<-- Change!
[
\'post_status\' => \'draft\',
\'post_title\' => \'xml-rpc testing\',
\'post_content\' => \'hello xml-rpc! Random: \' . rand( 0, 999 ),
]
]
);
您必须根据需要修改路径、用户名和密码。
如果我没记错的话,this great article 去年我测试插件时,EricMann在客户端设置代码方面帮助了我
在站点B上安装-XML-RPC服务器这里我们添加了以下插件:
<?php
/**
* Plugin Name: Avoid XML-RPC Post Title Duplication
* Description: Prevent duplicate posts when doing wp.newPost via XML-RPC
* Plugin URI: http://wordpress.stackexchange.com/a/157261/26350
*/
add_action (\'xmlrpc_call\', \'wpse_xmlrpc_call\' ); /////
function wpse_xmlrpc_call( $method )
{
if( \'wp.newPost\' === $method )
add_filter( \'xmlrpc_wp_insert_post_data\', \'wpse_xmlrpc_wp_insert_post_data\' );
}////
function wpse_xmlrpc_wp_insert_post_data( $post_data )
{
// Check if the post title exists:
$tmp = get_page_by_title(
$post_data[\'post_title\'],
OBJECT,
$post_data[\'post_type\']
);
// Go from \'insert\' to \'update\' mode within wp_insert_post():
if( is_object ( $tmp ) )
$post_data[\'ID\'] = $tmp->ID;
return $post_data;
}
测试
Before activating our plugin:
如果客户端A创建了三篇标题相同但内容不同的帖子,那么它们将在站点B上显示如下:
在这里,我们看到这三篇文章都是作为新文章在服务器B上创建的。
After activating our plugin:
现在,如果客户端A创建了一个帖子,那么它将显示在服务器B上,如下所示:
然后客户端A创建另一篇文章,标题相同,但内容不同。现在修改了上一篇帖子:
帖子列表如下所示:
因此,我们避免了后期重复。
注意:确保站点B已启用XML-RPC。