使用自定义分类法自定义SQL查询(Wordpress)

时间:2014-10-16 11:59:05

标签: php mysql sql wordpress

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

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

非常感谢任何帮助!

更新 经过一番阅读后,我的解决方案是:

WordPress在[{1}}中存储分类法与帖子之间的关系(其中wp_term_relationshipsobject_idpost_idterm_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循环总是过滤掉任何重复的条目。

0 个答案:

没有答案