WordPressモバイルチームには、使用するXML-RPCパーサー用のリポジトリがあります。実装と使用はかなり簡単です。これはXMLRPCDecode
とXMLRPCEncoder
で構成されています。ワードプレスで
https://github.com/wordpress-mobile/wpxmlrpc
EDIT
XML-RPC
投稿するためのものです。 WordPressの実装ではwp.getPosts
メソッドでwp_get_recent_posts()
が使用されているため、投稿を取得する機能はかなり制限されています。私はclass-wp-xmlrpc-server.php
にwp_getPosts
メソッドを採用し、wp_get_recent_posts
をget_posts
に置き換えることにより、この機能を改善しました。だから私はWp_Query
クラスのようなすべてのパラメータを使用することができます。
xmlrpc_method
フィルタは、組み込みメソッドをオーバーライドするために使用されます。あなたが望むなら、コードを投稿することができます。
EDIT II
ネヴァーマインド、私はコードを投稿します... :)
include_once(ABSPATH . 'wp-admin/includes/admin.php');
include_once(ABSPATH . WPINC . '/post.php');
include_once(ABSPATH . WPINC . '/class-IXR.php');
include_once(ABSPATH . WPINC . '/class-wp-xmlrpc-server.php');
class jw_xmlrpc_server extends wp_xmlrpc_server {
function __construct($wp_xmlrpc_server) {
parent::__construct();
foreach(get_object_vars($wp_xmlrpc_server) as $key => $val) {
$wp_xmlrpc_server->key = $val;
}
}
public function minimum_args($args, $count) {
return parent::minimum_args($args, $count);
}
public function _prepare_post($post, $fields) {
return parent::_prepare_post($post, $fields);
}
}
class WP_Post_Converter {
public function to_array($post) {
$array = array();
foreach(get_object_vars($post) as $key => $val) {
$array[$key] = $val;
}
return $array;
}
}
function wp_getPosts($args) {
global $wp_xmlrpc_server;
$wp_server_save = $wp_xmlrpc_server;
$wp_xmlrpc_server = new jw_xmlrpc_server($wp_xmlrpc_server);
if (!$wp_xmlrpc_server->minimum_args($args, 3)) {
return $wp_xmlrpc_server->error;
}
$wp_xmlrpc_server->escape($args);
$blog_id = (int) $args[0];
$username = $args[1];
$password = $args[2];
$filter = isset($args[3]) ? $args[3] : array();
if (isset($args[4])) {
$fields = $args[4];
}
else {
$fields = apply_filters('xmlrpc_default_post_fields', array('post', 'terms', 'custom_fields'), 'wp.getPosts');
}
if (!$user = $wp_xmlrpc_server->login($username, $password)) {
return $wp_xmlrpc_server->error;
}
do_action('xmlrpc_call', 'wp.getPosts');
if (isset($filter['post_type'])) {
$post_type = get_post_type_object($filter['post_type']);
if (!((bool)$post_type)) {
return new IXR_Error(403, __('The post type specified is not valid'));
}
}
else {
$post_type = get_post_type_object('post');
}
if (!current_user_can($post_type->cap->edit_posts)) {
return new IXR_Error(401, __('Sorry, you are not allowed to edit posts in this post type'));
}
$filter['post_type'] = $post_type->name;
// $posts_list = wp_get_recent_posts($query);
$posts_list = get_posts($filter);
if (!$posts_list) {
return array();
}
// holds all the posts data
$struct = array();
foreach ($posts_list as $post) {
$post = WP_Post_Converter::to_array($post);
$post_type = get_post_type_object($post['post_type']);
if (!current_user_can($post_type->cap->edit_post, $post['ID'])) {
continue;
}
$struct[] = $wp_xmlrpc_server->_prepare_post($post, $fields);
}
$wp_xmlrpc_server = $wp_server_save;
return $struct;
}
function wp_get_categories($args) {
global $wp_xmlrpc_server;
$wp_server_save = $wp_xmlrpc_server;
$wp_xmlrpc_server = new jw_xmlrpc_server($wp_xmlrpc_server);
$wp_xmlrpc_server->escape($args);
$blog_ID = (int) $args[0];
$username = $args[1];
$password = $args[2];
if (!$user = $wp_xmlrpc_server->login($username, $password)) {
return $wp_xmlrpc_server->error;
}
if (!current_user_can('edit_posts')) {
return new IXR_Error(401, __('Sorry, you must be able to edit posts on this site in order to view categories.'));
}
do_action('xmlrpc_call', 'metaWeblog.getCategories');
$categories_struct = array();
if ($cats = get_categories(array('get' => 'all'))) {
foreach ($cats as $cat) {
$struct['categoryId'] = $cat->term_id;
$struct['parentId'] = $cat->parent;
$struct['postCount'] = $cat->count;
$struct['description'] = $cat->name;
$struct['categoryDescription'] = $cat->description;
$struct['categoryName'] = $cat->name;
$struct['htmlUrl'] = esc_html(get_category_link($cat->term_id));
$struct['rssUrl'] = esc_html(get_category_feed_link($cat->term_id, 'rss2'));
$categories_struct[] = $struct;
}
}
$wp_xmlrpc_server = $wp_server_save;
return $categories_struct;
}
function wp_method_setter($methods) {
$methods['wp.getPosts'] = 'wp_getPosts';
$methods['wp.getCategories'] = 'wp_get_categories';
return $methods;
}
add_filter('xmlrpc_methods', 'wp_method_setter');
だから、どちらか私はこの問題の唯一の一人、または多分答えはあまりにもあります明白な...? (私は後者を望んでいる) – Simon
♫♪私はそれをキックすることはできますか? ♫私はできないと思う! ♪♫ – Simon
本当に?誰もWPウェブサイト用のアプリを作成しようとしたことはありませんか? – Simon