我想避免通过xmlrpc复制帖子内容。因此:
如果post存在,则不会发生任何事情。如果不存在,则会发生数据插入。
检查的方法是帖子标题或帖子内容。我看到了this solution 但这似乎不起作用。
既然您添加了对我之前答案的引用,那么让我分享一下我是如何测试它的:
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在客户端设置代码方面帮助了我
<?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创建另一篇文章,标题相同,但内容不同。现在修改了上一篇帖子:帖子列表如下所示:因此,我们避免了后期重复。简而言之,我希望能够修改wp。getPost响应还返回其他数据,如permalink。我认为这就像调用xml rpc代码似乎要调用的同一个函数一样简单(wp_getPost):add_filter( \'xmlrpc_methods\', \'nc_xmlrpc_methods\' ); function nc_xmlrpc_methods( $methods ) { $methods[\'wp.getPost\'] = \'my_getPost\'; r