【问题标题】:One query to get latest 7 posts from each category in WordPress一个查询可从 WordPress 中的每个类别中获取最新的 7 个帖子
【发布时间】:2011-11-17 13:38:45
【问题描述】:

我希望编写一个自定义 SQL 查询,以从我的自定义帖子类型的 6 个特定类别中的每个类别中检索最新的 7 个帖子。

我知道如何查询自定义帖子类型和分类,但我的 SQL 知识有限。我不知道如何让 WordPress 为我提供 6 个类别中的每个类别的 7 个最新帖子。它的返回顺序并不重要,只要内容在那里。

示例:如果我有类别 1、2、3、4、5、6,我想从每个类别中检索 7 个最新帖子。具体来说,查询应该提取类别 1 的 7 个最新帖子、类别 2 的 7 个最新帖子等等,所有这些都通过一个查询来完成。

我不想拥有 6 个单独的 WP_Query 实例,因为它效率不高。

【问题讨论】:

  • 我遇到» this page on the WordPress Codex 涉及自定义 SQL 查询,其中一个示例涉及从特定类别中提取所有帖子,然后将 LIMIT 设置为 4。我想要做的是设置一个类似的限制,但针对每个类别,所以我可以从他们那里获得 7 个最新的帖子。
  • 我可能已经找到了解决方案,但我不确定这是否是最好的方法。任何人都可以提出改进或更好的方法来实现这一目标吗? CLICK HERE FOR AFOREMENTIONED SOLUTION
  • 请显示表结构 - CREATE TABLE 语句。它可能会帮助我们解决您的问题。
  • 这个问题还是没解决,不用做很多工作。我很久以前在 WordPress Ideas 上发布了这个想法;它现在是最受好评的创意之一。帮助投票更多,以将此功能纳入 WP 核心。 wordpress.org/ideas/topic/…

标签: mysql wordpress posts


【解决方案1】:

你需要像下面这样使用 UNION

SELECT wposts.* 
FROM $wpdb->posts wposts
    LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE wpostmeta.meta_key = 'customDateField'
    AND wpostmeta.meta_value >= CURDATE()
    AND $wpdb->term_taxonomy.taxonomy = 'category'
    AND $wpdb->term_taxonomy.term_id IN(1)
ORDER BY wpostmeta.meta_value ASC
LIMIT 7
UNION
SELECT wposts.* 
FROM $wpdb->posts wposts
    LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE wpostmeta.meta_key = 'customDateField'
    AND wpostmeta.meta_value >= CURDATE()
    AND $wpdb->term_taxonomy.taxonomy = 'category'
    AND $wpdb->term_taxonomy.term_id IN(2)
ORDER BY wpostmeta.meta_value ASC
LIMIT 7
UNION
SELECT wposts.* 
FROM $wpdb->posts wposts
    LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE wpostmeta.meta_key = 'customDateField'
    AND wpostmeta.meta_value >= CURDATE()
    AND $wpdb->term_taxonomy.taxonomy = 'category'
    AND $wpdb->term_taxonomy.term_id IN(3)
ORDER BY wpostmeta.meta_value ASC
LIMIT 7

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 2013-12-10
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2014-07-19
    相关资源
    最近更新 更多