XMLRPC和带下划线的自定义字段

时间:2014-10-22 作者:Erçin Dedeoğlu

我正在创建应用程序,以便从桌面上自动化所有博客。目标,我会发布博客。仅此而已。我用过XMLRPC 服务,如您所知的“xmlrpc.php”。

我建造了许多零件,接近完工。。。但在以(\\u)下划线开头的自定义字段上遇到了问题。我想另存为“\\u thumbnail\\u id”=>(int)number。什么都没发生。

但当我尝试“thumbnail\\u id”或类似的东西时,没有以下划线开头。没关系。工作正常,但从下划线开始。。。

我需要它来确定帖子的特色形象。没有标签;我不能。我也不知道其他选择。

我发现:https://wordpress.org/support/topic/how-can-i-change-protected-params-xmlrpc但不能解决我的问题。我不想更改wordpress文件。如果有必要,我可以编写一个没有RPC的小脚本。

任何帮助都会很棒!

2 个回复
SO网友:birgire

使用XML-RPC和带下划线的自定义字段:

假设我们要使用$remote_post_id.

我们希望它是ID等于的附件300, 所以我们想要_thumbnail_id 未来300.

以下是实现这一目标的三种方法:

方法#1-使用post_thumbnail

可以使用post_thumbnail 参数:

$result = $client->query( 
    \'wp.editPost\', 
    array(
        $blog_id,
        $username,
        $password,
        $remote_post_id,
        $post_data = array(
            \'post_thumbnail\' => \'300\',
        ),
    ) 
);
如图所示wp_xmlrpc_server][1] 类别。

方法#2-使用custom_fields 具有meta_id

如果我们想更新帖子的自定义字段,我们必须知道它的数据库meta_id 价值

但是我们怎么知道meta_id?

默认情况下,当我们获取带有以下内容的帖子时,自定义字段实际上包括在内:

$result = $client->query( 
    \'wp.getPost\', 
    array(
        $blog_id,
        $username,
        $password,
        $remote_post_id,
    ) 
);
如果帖子具有特色帖子缩略图,则上述结果将包含以下部分:

<member>
    <name>custom_fields</name>
    <value>
        <array>
            <data>
                <value>
                    <struct>
                        <member>
                            <name>id</name>
                            <value>
                                <string>560</string>
                            </value>
                        </member>
                        <member>
                            <name>key</name>
                            <value>
                                <string>_thumbnail_id</string>
                            </value>
                        </member>
                        <member>
                            <name>value</name>
                            <value>
                                <string>200</string>
                            </value>
                        </member>
                    </struct>
                </value>
            </data>
        </array>
    </value>
 </member>
其中meta_id 例如560 还有老人meta_value200.

现在我们可以更新_thumbnail_id 凭借我们的新价值:

$result = $client->query( 
    \'wp.editPost\', 
    array(
        $blog_id,
        $username,
        $password,
        $remote_post_id,
        $post_data = array(
            \'custom_fields\' => array( 
                array( 
                    \'id\'    => \'560\', 
                    \'key\'   => \'_thumbnail_id\', 
                    \'value\' => 300 
                )
            ),
        ),
    ) 
);
请注意,如果我们跳过meta_id 部分,我们只会跑add_post_meta(), 而不是[update_metadata_by_mid()][2] 这是在this trac. 我们还必须具备编辑post\\U meta功能。

但这并不是全部,因为以下划线(\\u1)开头的元键受到保护。

我们可以通过使用[register_meta()][3] 远程站点上的功能。

例如:

/**
 * Unprotect the _thumbnail_id meta key to allow updates via XML-RPC 
 * We need to set this up on the remote site.
 */

add_action( \'init\', function() {
        register_meta( \'post\', \'_thumbnail_id\', \'absint\', \'__return_true\' );
});
取消保护_thumbnail_id 元键。我第一次尝试intval 作为一个消毒回调,但这不起作用。

我们可以对其他受保护的元密钥使用类似的设置。

方法#3使用自定义XML-RPC方法xmlrpc_methods 筛选以添加我们自己的方法。

这个Codex 提供有关该问题的更多信息。

参考资料:

以下是一些在测试时帮助我的链接:

SO网友:Mark Kaplun

_下划线元数据定义为软件内部的数据,用户不会直接更改。这可能就是您无法通过XMLRPC更改它的原因。

如果需要这种功能,可以编写一个小插件,扩展可以使用XMLRPC更改的数据集。

但由于您的问题是专门针对特色图像的,所以您应该寻找一个api,该api允许您将附件关联为特色图像。快速谷歌没有为此发布任何文档,但似乎人们已经成功地做到了这一点https://stackoverflow.com/questions/12355922/set-featured-image-for-wordpress-post-via-xml-rpc.

结束