Return XML of Post Metadata

时间:2011-04-28 作者:idea

我在一个类别(即位置)中的所有帖子都有两个自定义字段:纬度和经度。我想返回所有这些帖子(标题、纬度、经度)的XML或JSON,作为谷歌地图的标记。

我不能简单地调用一个独立的php文件来返回我的数据,因为我想通过$wpdb访问我的数据。

最好的解决方案是什么?

1 个回复
最合适的回答,由SO网友:Chris_O 整理而成

最好的解决方案是以所需的精确格式创建自定义XML页面模板。如果您查看下面从WordPress XML exporter获取的代码,您可以看到它返回的数据包含我们在典型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 M Y H: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 M Y H:i:s +0000\', get_post_time(\'Y-m-d 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
}

结束