我使用以下SQL查询来获取Wordpress中的自定义帖子。 我最终得到了这个解决方案,因为我需要根据自定义元数据获取和排序帖子。到目前为止,这个问题非常好!
但我如何在查询中加入自定义分类法? 举例来说,只提取与term_id 5相关联的帖子? 我真的被困在这里,因为我无法弄清楚wp_terms,关系等是如何连接的......
非常感谢任何帮助!
更新 经过一番阅读后,我的解决方案是:
WordPress在[{1}}中存储分类法与帖子之间的关系(其中wp_term_relationships
是object_id
而post_id
是term_taxonomy_id
term_id
wp_terms
)。因此,如果我只想获取属于特定term_id的帖子,我想出了以下查询。就我所知,似乎工作!
这是我的查询
global $wpdb;
$activelang = ICL_LANGUAGE_CODE;
$cmonth = date('Y-m');
$myquery = "
SELECT wposts.*, wpostmeta.meta_value AS date
FROM wp_posts wposts, wp_postmeta wpostmeta, wp_icl_translations wicl_translations, , wp_term_relationships wptermrelations
WHERE wposts.post_status = 'publish'
AND wpostmeta.post_id = wposts.ID
AND (wptermrelations.object_id = wposts.ID AND (wptermrelations.term_taxonomy_id = '29' OR wptermrelations.term_taxonomy_id = '30'))
AND wposts.post_type = 'event'
AND wicl_translations.element_id = wposts.ID
AND wicl_translations.language_code = '$activelang'
AND (wpostmeta.meta_key = '_ws_prem_date' OR wpostmeta.meta_key = '_ws_date1_date' OR ... ... OR wpostmeta.meta_key = '_ws_date10_date')
AND wpostmeta.meta_value >= '$cmonth-01'
ORDER BY CAST(date AS DATETIME),wposts.post_title ASC
";
$myloop = $wpdb->get_results($myquery);
如果有人想知道这个查询的作用:
此查询提取自定义帖子类型(具有多个相关日期的事件),并为这些事件构建一个循环,允许重复输入,因为正常情况下#= WordPress循环总是过滤掉任何重复的条目。