XMLRPC避免重复内容

时间:2015-10-13 作者:David Peterson

我想避免通过xmlrpc复制帖子内容。因此:

如果post存在,则不会发生任何事情。如果不存在,则会发生数据插入。

检查的方法是帖子标题或帖子内容。我看到了this solution 但这似乎不起作用。

1 个回复
最合适的回答,由SO网友:birgire 整理而成

既然您添加了对我之前答案的引用,那么让我分享一下我是如何测试它的:

站点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上显示如下:

before

在这里,我们看到这三篇文章都是作为新文章在服务器B上创建的。

After activating our plugin:

现在,如果客户端A创建了一个帖子,那么它将显示在服务器B上,如下所示:

after2

然后客户端A创建另一篇文章,标题相同,但内容不同。现在修改了上一篇帖子:

after3

帖子列表如下所示:

after1

因此,我们避免了后期重复。

注意:确保站点B已启用XML-RPC。

相关推荐

修改WordPress XML-RPC内置

简而言之,我希望能够修改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