Возврат XML метаданных сообщения

Все мои сообщения в одной категории (т.е. Location) имеют два настраиваемых поля: широта и долгота. Я хотел бы вернуть XML или JSON всех этих сообщений (название, широта, долгота) для использования в качестве маркеров Google Maps.

Я не могу просто вызвать автономный php-файл, чтобы возвращать мои данные, поскольку я хотел бы получить доступ к своим данным через $ wpdb.

Какое лучшее решение?

Лучшим решением является создание настраиваемого шаблона XML-страницы в точном формате, который вам нужен. Если вы посмотрите на код ниже, взятый из XML-экспортера WordPress, вы увидите, что возвращаемые данные содержат обычный материал, который мы видим в типичном цикле WordPress.

echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?' . ">\n"; ?> <!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your blog. --> <!-- It contains information about your blog's posts, comments, and categories. --> <!-- You may use this file to transfer that content from one site to another. --> <!-- This file is not intended to serve as a complete backup of your blog. --> <!-- To import this information into a WordPress blog follow these steps. --> <!-- 1. Log into that blog as an administrator. --> <!-- 2. Go to Tools: Import in the blog's admin panels (or Manage: Import in older versions of WordPress). --> <!-- 3. Choose "WordPress" from the list. --> <!-- 4. Upload this file using the form provided on that page. --> <!-- 5. You will first be asked to map the authors in this export file to users --> <!-- on the blog. For each author, you may choose to map to an --> <!-- existing user on the blog or to create a new user --> <!-- 6. WordPress will then import each of the posts, comments, and categories --> <!-- contained in this file into your blog --> <?php the_generator('export');?> <rss version="2.0" xmlns:excerpt="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/excerpt/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wp="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/" > <channel> <title><?php bloginfo_rss('name'); ?></title> <link><?php bloginfo_rss('url') ?></link> <description><?php bloginfo_rss("description") ?></description> <pubDate><?php echo mysql2date('D, d MYH:i:s +0000', get_lastpostmodified('GMT'), false); ?></pubDate> <generator>http://wordpress.org/?v=<?php bloginfo_rss('version'); ?></generator> <language><?php echo get_option('rss_language'); ?></language> <wp:wxr_version><?php echo WXR_VERSION; ?></wp:wxr_version> <wp:base_site_url><?php echo wxr_site_url(); ?></wp:base_site_url> <wp:base_blog_url><?php bloginfo_rss('url'); ?></wp:base_blog_url> <?php if ( $cats && ($terms == 'all' || $terms == 'cats')) : foreach ( $cats as $c ) : ?> <wp:category><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->name : ''; ?></wp:category_parent><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category> <?php endforeach; endif; ?> <?php if ( $tags && ($terms == 'all' || $terms == 'tags')) : foreach ( $tags as $t ) : ?> <wp:tag><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name($t); ?><?php wxr_tag_description($t); ?></wp:tag> <?php endforeach; endif; ?> <?php do_action('rss2_head'); ?> <?php if ($post_ids) { global $wp_query; $wp_query->in_the_loop = true; // Fake being in the loop. // fetch 20 posts at a time rather than loading the entire table into memory while ( $next_posts = array_splice($post_ids, 0, 20) ) { $where = "WHERE ID IN (".join(',', $next_posts).")"; $posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); foreach ($posts as $post) { setup_postdata($post); ?> <item> <title><?php echo apply_filters('the_title_rss', $post->post_title); ?></title> <link><?php the_permalink_rss() ?></link> <pubDate><?php echo mysql2date('D, d MYH:i:s +0000', get_post_time('Ymd H:i:s', true), false); ?></pubDate> <dc:creator><?php echo wxr_cdata(get_the_author()); ?></dc:creator> <?php wxr_post_taxonomy() ?> <guid isPermaLink="false"><?php the_guid(); ?></guid> <description></description> <content:encoded><?php echo wxr_cdata( apply_filters('the_content_export', $post->post_content) ); ?></content:encoded> <wp:post_date><?php echo $post->post_date; ?></wp:post_date> <wp:post_date_gmt><?php echo $post->post_date_gmt; ?></wp:post_date_gmt> </item> <?php } } } ?> </channel> </rss> <?php }