我有一个meeting
post类型,其标题自动设置为表单的日期m/d/Y
. 我有一个下面的查询,通过在最后一个之后选择不同的值,从帖子标题中获取所有唯一的年份/
在帖子标题内。
SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts}
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
这将输出一个如下所示的数组
["2019", "2018", "2017"]
.
我想做的是进一步细化,以便只考虑某个类别的帖子。
现在我知道下面的例子是错误的,因为类别实际上并不存储在帖子本身,但基本上我想按帖子类别进行优化,如下所示:
SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts}
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
AND post_category = \'some_cat_slug\'
此查询是关于我的SQL知识范围的,因此我不确定如何进行连接以按类别进行筛选。
编辑:澄清一下,这只是用于按年份生成分页按钮。所以简而言之,我正在努力寻找所有年份中至少有一个特定类别的会议帖子。如果可以这样做WP_Query
只是,我很乐意听你这么说。
编辑2:我通过在标题中存储帖子类别解决了我的问题。如果有人想回答,我就把这个放在这里。
SO网友:HU ist Sebastian
如果您希望能够按名称获取类别,这应该可以:
SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->term_relationships} rel ON rel.object_id = p.ID
LEFT JOIN {$wpdb->term_taxonomy} tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
LEFT JOIN {$wpdb->terms} t ON t.term_id = tax.term_id
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
AND t.name = \'Category Name\'
AND tax.taxonomy = \'category\'
如果您知道类别的term\\u taxonomy\\u id(主要但不总是term\\u id),则可以通过较少的左连接来完成此操作,如下图所示:
SELECT DISTINCT substr(post_title, - instr(reverse(post_title), \'/\') + 1)
AS year FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->term_relationships} rel ON rel.object_id = p.ID
WHERE post_status = \'publish\'
AND post_type = \'meeting\'
AND rel.term_taxonomy_id = <term_taxonomy_id of your category>
快乐的编码!