首先,我知道XML-RPC是用来发送原始post数据的,但我需要它来扩展短代码。我不使用它来发帖,所以这里不会有问题,但有一些服务正在从中获取帖子,他们得到的是短代码[],而不是扩展的短代码。我想切换到RSS,但我不能。我已经过期,但无法在wp xmlrpc server类中使用do\\u短代码。php谢谢。
如何处理XML-RPC中的快捷码
2 个回复
SO网友:kaiser
行为说明
在运行时(在面向公众的视图上呈现和显示帖子时)将处理短代码。在保存post期间,它绝对不是一个预处理器。接收方根本没有您的解析器(即处理短代码的函数),因此将得到原始结果。如何“修复”它只需预先注意:当你这样做时,它是不可逆的。短代码将被转换为任何替换的内容,结果将保存为帖子内容。
您将要使用
save_post
钩子以预处理帖子,并用其实际内容替换快捷码标记。您可能需要考虑的另一个选项是获取您想要使用的短代码get_shortcode_regex()
.挂钩和XML RPC
我不确定以下方法是否有效。众所周知,一个人可以extend the XML RPC interface, 但似乎有一些选项/挂钩可以更改返回的值(至少它还可以查询帖子)。像Matthew Murow 说明,您可以(在插件中)检查是否有XML RPC请求,然后在挂钩期间拦截:
在回调函数中,钩住if ( defined ( \'XMLRPC_REQUEST\' ) AND XMLRPC_REQUEST ) add_action( \'xmlrpc_call\', \'example_xmlrpc_posts_callback\' );
pre_get_posts
(…)滤器这看起来类似于:
function example_xmlrpc_posts_callback( $task ) { if ( \'wp.getPosts\' !== $task ) return; add_filter( \'pre_get_posts\', \'xmlrpc_pre_get_posts\' ); } function xmlrpc_pre_get_posts( $data ) { // Only run once - do not intercept later queries remove_filter( current_filter(), __FUNCTION__, 10 ); // Alter output: // pre-process shortcodes return $data; }
SO网友:Mark Kaplun
这不是WordPress想要使用的XML-RPC编辑方法实现的方式。XML-RPC是一种发布协议,您基本上希望打破最基本的编辑规则,即获取文件并保存而不进行修改将导致完全相同的文件。
在实际层面上,您需要区分获得“原始”数据的用户和获得已处理数据的用户。完成后,可以挂接xmlrpc\\u prepare\\u post过滤器
add_filter(\'xmlrpc_prepare_post\',\'wpse_83217_xml_post\',10,3);
function wpse_83217_xml_post($_post, $post, $fields) {
if (user gets processed post) {
$_post[\'post_content\'] = do_shortcodes($post[\'post_content\']);
}
return $_post;
}
未测试,并且不知道在调用之前是否需要运行其他任何操作do_shortcodes
为使其工作(可能设置全局$后var,可能需要使用the_content
过滤器)。但您真正应该做的是声明一个新的XML-RPC方法xmlrpc_methods
不管你想怎么过滤和处理它。这也需要对客户机进行调整,但这是实现您想要的更干净的方法。
结束