有条件查询博客主页的元元元素定制帖子类型?
-
16-10-2019 - |
题
(主持人注意: 问题的原始标题是:“自定义查询:显示自定义帖子类型以及在博客主页上使用元元的自定义帖子类型”)
我需要自定义查询的帮助。我有三种自定义帖子类型: “消息”, “事件”, “故事”. 。在主博客页面上,只会显示新闻和事件。客户可以选择标记故事 作为 使用插件功能的新闻 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当前无法处理这样的 或者 查询中的逻辑。
您可以进行两个查询并结合结果,但是在这种情况下,很难正确地找到分页。
这可能是杂志风格主题流行的原因之一,因为它们专门研究在几个领域展示多个帖子,而不是与复杂的内容混合在一起。