XML-RPC and Custom Post Types

时间:2011-02-04 作者:Jeremy Boyd

我找不到太多关于使用XML-RPC和自定义post类型的文档。

我有一个特定的要求,即远程发布和管理(客户有内部cms)必须用于自定义帖子类型。

3 个回复
最合适的回答,由SO网友:Peter Rowell 整理而成

@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() 允许您在不修改核心代码的情况下从沼泽地左转。

SO网友:Félix Delval

它已包含在Wordpress 3.4中。您可以通过以下功能访问自定义类型的帖子:

可湿性粉剂。getPost可湿性粉剂。getPosts可湿性粉剂。newPost可湿性粉剂。编辑帖子

http://codex.wordpress.org/Version_3.4

http://codex.wordpress.org/XML-RPC_WordPress_API

SO网友:keatch

http://codex.wordpress.org/XML-RPC_wp 报告XML-RPC文档,有点过时。

http://core.trac.wordpress.org/browser/trunk/wp-includes/class-wp-xmlrpc-server.php 是实际的XML-RPC服务器。快速查看,似乎不支持发布到自定义帖子类型!

结束

相关推荐

如何通过XML-RPC获取所有帖子(以块为单位)?

I would like to retrieve all posts of a blog via the XML-RPC API of Wordpress.有以下方法blogger.getRecentPosts 和metaWeblog.getRecentPosts 理论上,如果给出足够高的值作为职位数量(或-1),则应返回所有职位。但是,这不适用于非常大的博客或非常弱的服务器,这些服务器无法在内存中保存整个博客。在这种情况下,这些函数最多不会返回任何内容,也不会向响应XML中抛出错误。一种解决方案是一次检