@keatch是正确的,即开箱即用的WP XML-RPC不支持“post”和“page”以外的post类型。然而,快速浏览代码表明,这可能相对容易更改。
在WP 3.0.4中,xmlrpc.php
, 1989行,我们有函数mw_newPost()
(它起着重物的作用)。在2005行,有一个if-else
检查post类型,但从2021开始插入额外的检查很容易扩展。然后在2059行,我们有一个switch($post_type)
这也很容易扩展。
和这就是insert的内容。在第2196行,数据被打包并插入,在第2213行,自定义字段被附加到post上,似乎没有任何其他内容post_type
.
可能还有一些地方可以扩展其他命令,但只需继续搜索即可post_type
(没有“$”)并查看它是否会产生任何影响。
请注意:这是一个核心WP文件,任何对其的攻击都将被核心的下一次更新所覆盖。另一方面,这些都是微不足道的更改,您可以确保客户端在更新core之前通知您。
回复评论:生活比拉斯特的评论看起来要复杂得多。他指出的一个很好的答案是解决一个比你的问题要简单得多的问题。在kongo09对Rarst自己的回答的评论中,他观察到“这方面可能没有帮助”。
自定义贴子是WP代码中的一点事后考虑。当您在许多地方查看逻辑时,您会看到最初说“用帖子做这件事”的代码。当页面出现时,代码必须扩展以处理帖子和页面。然后,它必须再次扩大,以处理海关哨所。这是一个经典的编程进化:1,2,多。
xmlrpc代码是停留在“2”(有时甚至是“1”)的地方之一。在尝试向核心代码添加功能时,您必须在几种可能的路径之间进行选择,所有这些路径都有其缺点。
提交请求/错误记录单,等待核心团队修复。这可能需要一些时间,您的客户可能不愿意等待。参考kongo09的声明。
自己修复代码并提交补丁。在等待补丁被接受的同时,将每个新更新重新应用到core。这是我的建议,虽然我handwaved 详细信息。如果您使用Mercurial的MqMerge之类的工具,那么跨可能存在冲突的更改管理修订将更加容易。我不会和SVN一起尝试这个。仔细检查每个合并,因为这是一种可以在各个版本之间完全混合的代码。
复制大量核心xmlrpc代码,进行更改,并通过xmlrpc_methods
他链接到的帖子中提到的过滤器。这意味着您已经有效地分叉了代码。虽然它有助于“轻松更新”,但它也是一种容易错过对派生代码所做的重要安全更改的方法。这不是一个无关紧要的问题,只要在“wordpress xmlrpc安全”上搜索一下就会发现。请注意,3.0.1和3.0.2都存在XML安全问题。
您可能会被迫做3或2的事情,因为您越是查看xmlrpc的WP部分,就越意识到对于什么类型的对象可以做什么是多么随意,例如使用WP xml接口只能创建一个页面,而MW方法mw_newPost()
(由WP方法调用wp_newPost()
) 允许新页面或新帖子,但不允许新的自定义帖子,就是这样。要完全支持自定义帖子需要付出巨大的努力,并且无论您选择何种方法,保持它与核心更改的同步可能会有问题。
Update - 2 weeks later: 因此,一位朋友刚刚问了我一个与Jeremy几乎完全相同的问题。这迫使我认真研究XMLRPC代码,看看如何进行更改,同时避免Rarst提出的“修改核心”问题。事实证明,有大量的非法文件do_action()
hooks plus(更重要的是为了这些目的)a提到但未记录apply_filters(\'xmlrpc_methods\', $this->methods);
(第203行),允许任意修改/添加/删除方法。
我仍然认为XMLRPC代码是一片沼泽,但是apply_filter()
允许您在不修改核心代码的情况下从沼泽地左转。