手动检索带有 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 [重复]