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

Posted

技术标签:

【中文标题】手动检索带有 JSON 类别/标签的 Wordpress 帖子【英文标题】:Manually retrieve Wordpress posts with category/tags for JSON 【发布时间】:2012-04-12 05:27:27 【问题描述】:

我正在尝试手动查询 wordpress 数据库以检索 json 提要的特定帖子内容。从理论上讲,我想返回多个“发布”对象,每个对象都包含每个标签/类别的“标签/类别”数组。

我目前正在使用以下 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

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

【问题讨论】:

您为什么要为此使用手动 SQL 查询?您可以在几分钟内编写一个 wordpress 页面来使用 wp_query() 【参考方案1】:

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

假设 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。

【讨论】:

【参考方案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'

【讨论】:

【参考方案3】:

就我而言,我这样做了:

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

虽然它很臃肿,也许有人有更时尚的方法。

【讨论】:

以上是关于手动检索带有 JSON 类别/标签的 Wordpress 帖子的主要内容,如果未能解决你的问题,请参考以下文章

如何根据类别标签手动拆分训练和测试数据

如何使用从 TextView 中的 firebaseDB 检索到的标签解析 HTML 文本?没有 WebView [重复]

检索按类别分组的 SQL 结果

获取带有特定类别附件的帖子?

如何使用带有标头的改造来检索 JSON?

按类别内的标签过滤文章 - Joomla 和 K2