我使用以下SQL查询来获取Wordpress中的自定义帖子 . 我最终得到了这个解决方案,因为我需要根据自定义元数据获取和排序帖子 . 到目前为止,这个相当不错!

但是,如何在我的查询中加入自定义分类法?举例来说,只提取与term_id 5相关联的帖子?我真的被困在这里因为我无法弄清楚wp_terms,关系等是如何连接的......

任何帮助是极大的赞赏!

UPDATE: 经过一番阅读,我的案例中的解决方案是这样的:

WordPress在 wp_term_relationships 中存储分类法和帖子之间的关系(其中 object_idpost_idterm_taxonomy_idterm_idwp_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循环始终过滤掉任何重复条目 .