[XML-RPC] Post list of specific category.
-
Hello!
In file ‘xmlrpc.php’ we can find out useful functions.
Also here: linkWhat I want to do is to obtain (complete) list of post ID’s for given category Name or ID i.e. getPosts(4)
I have found two functions in xmlrmpc.php which we can use:
a) mw_getCategories and b) mw_getRecentPostsFor a) myBlog.getCategories() (I’m using C#)
We receive struct array of Categories which contains ‘Category Id’ , ‘Name’ etc.1st question. How I can add to those structs, array of posts id’s which are in this category ?
(I can get post giving the post id, that’s why I want to obtain posts id’s of specific category)For b) myBlog.getRecentPosts(20) where 20 is the numer of posts to receive
2nd question. How I can change this function to give category name/id and return all posts in that category id/name ?
Any ideas? Could someone help me with this?
Best Regards,
MattExample in files:
function mw_getCategories($args) { $this->escape($args); $blog_ID = (int) $args[0]; $username = $args[1]; $password = $args[2]; if ( !$user = $this->login($username, $password) ) { return $this->error; } if( !current_user_can( 'edit_posts' ) ) return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this blog in order to view categories.' ) ); do_action('xmlrpc_call', 'metaWeblog.getCategories'); $categories_struct = array(); if ( $cats = get_categories('get=all') ) { foreach ( $cats as $cat ) { $struct['categoryId'] = $cat->term_id; $struct['parentId'] = $cat->parent;
add here i.e $struct[‘AllPosts’] which will be contains all posts ID’s in this category.
$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; } } return $categories_struct; }
function mw_getRecentPosts($args) { $this->escape($args); $blog_ID = (int) $args[0]; $username = $args[1]; $password = $args[2]; $num_posts = (int) $args[3]; if ( !$user = $this->login($username, $password) ) { return $this->error; } do_action('xmlrpc_call', 'metaWeblog.getRecentPosts'); $posts_list = wp_get_recent_posts($num_posts);
change num_posts to category_id and recive all posts in that category
if (!$posts_list) { return array( ); } foreach ($posts_list as $entry) { if( !current_user_can( 'edit_post', $entry['ID'] ) ) continue; $post_date = mysql2date('Ymd\TH:i:s', $entry['post_date'], false); $post_date_gmt = mysql2date('Ymd\TH:i:s', $entry['post_date_gmt'], false); // For drafts use the GMT version of the date if ( $entry['post_status'] == 'draft' ) { $post_date_gmt = get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $entry['post_date'] ), 'Ymd\TH:i:s' ); } $categories = array(); $catids = wp_get_post_categories($entry['ID']); foreach($catids as $catid) { $categories[] = get_cat_name($catid); } $tagnames = array(); $tags = wp_get_post_tags( $entry['ID'] ); if ( !empty( $tags ) ) { foreach ( $tags as $tag ) { $tagnames[] = $tag->name; } $tagnames = implode( ', ', $tagnames ); } else { $tagnames = ''; } $post = get_extended($entry['post_content']); $link = post_permalink($entry['ID']); // Get the post author info. $author = get_userdata($entry['post_author']); $allow_comments = ('open' == $entry['comment_status']) ? 1 : 0; $allow_pings = ('open' == $entry['ping_status']) ? 1 : 0; // Consider future posts as published if( $entry['post_status'] === 'future' ) { $entry['post_status'] = 'publish'; } $struct[] = array( 'dateCreated' => new IXR_Date($post_date), 'userid' => $entry['post_author'], 'postid' => $entry['ID'], 'description' => $post['main'], 'title' => $entry['post_title'], 'link' => $link, 'permaLink' => $link, // commented out because no other tool seems to use this // 'content' => $entry['post_content'], 'categories' => $categories, 'mt_excerpt' => $entry['post_excerpt'], 'mt_text_more' => $post['extended'], 'mt_allow_comments' => $allow_comments, 'mt_allow_pings' => $allow_pings, 'mt_keywords' => $tagnames, 'wp_slug' => $entry['post_name'], 'wp_password' => $entry['post_password'], 'wp_author_id' => $author->ID, 'wp_author_display_name' => $author->display_name, 'date_created_gmt' => new IXR_Date($post_date_gmt), 'post_status' => $entry['post_status'], 'custom_fields' => $this->get_custom_fields($entry['ID']) ); } $recent_posts = array(); for ($j=0; $j<count($struct); $j++) { array_push($recent_posts, $struct[$j]); } return $recent_posts; }
- The topic ‘[XML-RPC] Post list of specific category.’ is closed to new replies.