我使用以下SQL查询来获取Wordpress中的自定义帖子 . 我最终得到了这个解决方案,因为我需要根据自定义元数据获取和排序帖子 . 到目前为止,这个相当不错!
但是,如何在我的查询中加入自定义分类法?举例来说,只提取与term_id 5相关联的帖子?我真的被困在这里因为我无法弄清楚wp_terms,关系等是如何连接的......
任何帮助是极大的赞赏!
UPDATE: 经过一番阅读,我的案例中的解决方案是这样的:
WordPress在 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循环始终过滤掉任何重复条目 .