手动检索带有JSON类别/标签的Wordpress帖子

时间:2012-03-28 15:17:34

标签: php mysql json wordpress

我正在尝试手动查询wordpress数据库以检索json Feed的特定帖子内容。从理论上讲,我想返回一些“Post”对象,每个对象在每个标记/类别中包含一个“tags / categories”数组。

我目前正在使用以下SQL查询来检索我想要的帖子,但是我想我错过了wp_term_taxonomy表之间的关系,并且每个标记/类别返回一个唯一的行:

SELECT wp_posts.post_date, wp_posts.post_content, wp_posts.post_title, wp_posts.ID, wp_terms.name
FROM wp_posts
LEFT JOIN wp_term_relationships ON ( wp_term_relationships.object_id = wp_posts.ID ) 
LEFT JOIN wp_terms ON ( wp_terms.term_id = wp_term_relationships.term_taxonomy_id ) 
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.ID DESC 
LIMIT 25

有人对我如何实现目标有任何建议吗?我不想做的是做一个查询来获取帖子,然后遍历每个查询并查询以获取和设置标签/类别数组 - 但也许这是我唯一的选择?

3 个答案:

答案 0 :(得分:4)

如果您尝试通过JSON从WordPress检索信息,那么将WordPress中的页面作为请求URL更有意义:

说网址是yourwebsite.com/request/?posts_per_page=10;你使用那个slug在WordPress中创建一个页面,然后使用一个只包含以下代码的页面模板:

$parameters = array(
    'post_type' => 'post',
        'posts_per_page' => $_GET['posts_per_page']
    );
}
$requested_object = get_posts($parameters);

// if we have a request
if (!empty($requested_object)) {

    foreach ($requested_object as $post) :  setup_postdata($post); 

        // build the json request
        // you can make your arrays of tags & categories here
        $json_request[] = array(
            'id' => get_the_ID(),
            'title' => get_the_title(),
            'content' => apply_filters('the_content',$post->post_content)
        );

    endforeach;

    // return the json request
    header('Content-type: application/json');
    echo json_encode($json_request);

当您的javascript请求/ request /?posts_per_page = 10时,它会获得包含10个帖子的JSON以及您想要的所有属性。

答案 1 :(得分:2)

感兴趣的是MYSQL查询根据标记得到所有帖子:

SELECT * FROM wp_posts
LEFT JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_ID
LEFT JOIN wp_term_taxonomy
ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
LEFT JOIN wp_terms
ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE wp_terms.name = 'ford'

答案 2 :(得分:0)

在我的案例中,我做过:

SELECT wp.ID, wp.post_title, wp.post_status, wt.slug, wtt.taxonomy, wtt.term_taxonomy_id, wtt.parent FROM wp2_posts wp
INNER JOIN wp2_term_relationships wtr ON wp.ID = wtr.object_ID
INNER JOIN wp2_term_taxonomy wtt ON wtr.term_taxonomy_id = wtt.term_taxonomy_id
INNER JOIN wp2_terms wt ON wt.term_id = wtt.term_id
WHERE wt.slug = 'tagname'
AND wp.ID IN(
SELECT wp2_posts.ID FROM wp2_posts
INNER JOIN wp2_term_relationships
ON wp2_posts.ID = wp2_term_relationships.object_ID
INNER JOIN wp2_term_taxonomy
ON wp2_term_relationships.term_taxonomy_id = wp2_term_taxonomy.term_taxonomy_id
INNER JOIN wp2_terms
ON wp2_terms.term_id = wp2_term_taxonomy.term_id
WHERE wp2_terms.slug = 'categoryname')
ORDER BY wp.ID ASC
但是,它很臃肿,也许某人有更简洁的方法去做。