使用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_value
是
200
.
现在我们可以更新_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方法正如@MarkKaplen在回答中提到的,我们可以根据需要扩展XML-RPC设置。例如,我们可以使用xmlrpc_methods
筛选以添加我们自己的方法。
这个Codex 提供有关该问题的更多信息。
参考资料:
以下是一些在测试时帮助我的链接: