(主持人注意: 问题的原始标题是:“自定义查询:显示自定义帖子类型以及在博客主页上使用元元的自定义帖子类型”)

我需要自定义查询的帮助。我有三种自定义帖子类型: “消息”, “事件”, “故事”. 。在主博客页面上,只会显示新闻和事件。客户可以选择标记故事 作为 使用插件功能的新闻 Verve Meta盒. 。如果故事帖子具有元元密钥 'mark-as-news' 然后,该帖子也应显示在主博客页面上。

因此,我需要写作的帮助是:

如果故事有元后 'mark-as-news' 然后,主博客页面将以降序显示自定义帖子类型新闻和事件以及故事。

有人可以协助吗?

谢谢!

编辑:

也许是一种更好的措辞方式?

显示自定义帖子类型新闻和事件,以及是否有关键 'mark-as-news' 为了 post_meta, ,展示故事。

有帮助吗?

解决方案

你好 @webcodeslinger:

这是加载新闻和事件的基本MySQL查询 (这是从WordPress实际上做出的极大简化的):

SELECT * FROM wp_posts WHERE post_type IN ('news','events') 

您想要的是这样的 (在MySQL中有更多的性能方法可以做到这一点,但是它们在WordPress中更为复杂,对于大多数网站,您永远不会发现差异):

SELECT * FROM wp_posts WHERE post_type IN ('news','events') 
  OR (post_type='stories' AND ID IN 
    (SELECT post_id FROM wp_postmeta WHERE meta_key='mark-as-news')
  )

所以...要将额外的SQL添加到主循环的查询中 'posts_where' 钩。您可以将以下挂钩代码放入主题 functions.php 文件 (在文件的底部会这样做) 或其中之一 .php 如果要创建插件,则插件的文件:

add_action('posts_where','yoursite_posts_where',10,2);
function yoursite_posts_where($where,$query) {
  global $wp_the_query;
  if (is_home() && $query===$wp_the_query) { // This means home page and the main loop
    global $wpdb;
    $where .= " OR ({$wpdb->posts}.post_type='actor' AND " . 
              "{$wpdb->posts}.ID IN (" . 
                "SELECT post_id FROM {$wpdb->postmeta} " .
                "WHERE meta_key='mark-as-news')) ";
  }
  return $where;
}

其他提示

您想要的很容易描述,但是很难与WP API一起使用。到目前为止,我还没有看到整齐的解决方案。

基本上,WP查询是SQL查询的精美包装器,该包装器从数据库中获取后行。您想要的几乎是两套不同帖子的两个不同的查询。 WP当前无法处理这样的 或者 查询中的逻辑。

您可以进行两个查询并结合结果,但是在这种情况下,很难正确地找到分页。

这可能是杂志风格主题流行的原因之一,因为它们专门研究在几个领域展示多个帖子,而不是与复杂的内容混合在一起。

许可以下: CC-BY-SA归因
scroll top