【发布时间】:2016-06-22 08:06:02
【问题描述】:
使用名为 Pods 的 WordPress 插件,我定义了两种自定义帖子类型:venue 和 event。除了普通的元字段,Pods 还允许在帖子类型之间定义所谓的“关系”字段。
在我的例子中,我在 events 中使用了这样一个“关系”字段,将事件与 venue 相关联。 Pods 将相关 venue 帖子的 post_id 存储为 event 帖子的元值。
现在,在 WordPress 的管理员中,我想为我的自定义帖子类型 events 扩展编辑视图。我想让 events 列表按 venue 排序。 我的问题是,MySQL 语句必须如何实现这一点?我很难理解 events 和 venues 都作为帖子存储在 wp_post 表中的事实。
相关架构如下:
wp_posts
(id
,post_title
,post_type
)
wp_postmeta
(meta_id
,post_id
,meta_key
,meta_value
)
我正在寻找类似的东西
SELECT t1.post_title AS event_title
, t2.meta_value AS venue
FROM wp_posts AS t1
JOIN wp_postmeta AS t2
ON t2.post_id = t1.id
WHERE t1.post_type = 'event'
AND t2.meta_key = 'event_venue'
上面的语句让我得到了事件的标题以及相关场地的 ID。使用此 ID,我需要再次查询 wp_posts 和 wp_postmeta (... WHERE t1.post_type = 'venue' ...) 以检索相关场所的标题和其他字段。那么,如何在一个查询中做到这一点?
文吉普。
请注意:这个问题不是关于如何扩展 WordPress 管理员或如何使用 WP 挂钩在帖子列表中显示自定义列或如何制作这些列表可按自定义列排序。我只需要正确的 SQL 语句。这就是为什么我没有将我的问题发布到 wordpress.stackexchange.com。
【问题讨论】:
-
@Strawberry:看,活动和场所都是 WordPress 术语中的帖子。它们是自定义帖子类型的帖子。事件有一个标记为“event_venue”的自定义元字段,其中包含自定义帖子类型“venue”的任何帖子的 post_id。我已经编辑了伪 SQL 语句来清除。