我正试图解决一个名为"Event Calendar 3"的Word Press插件。此插件允许您创建事件,然后将其馈送到Wordpress数据库中的SQL表中。但是,此插件不区分不同类型的事件,例如重复事件、一次性事件。
我的解决方案的开始是创建一个名为“重复事件”的类别,当我创建一个事件帖子时,也将其标记为重复事件。然后我尝试构造一个查询,该查询将返回分类为“事件”的帖子,但也将排除“重复事件”

$query = SELECT *
         FROM wp_posts p, wp_ec3_schedule s, wp_terms ts, wp_term_taxonomy t, wp_term_relationships r
WHERE p.ID = s.post_ID
AND r.term_taxonomy_id = t.term_taxonomy_id
AND ts.term_id = t.term_id
AND name != "Repeating"

问题是,具有“重复”类别的帖子也具有“事件”类别(必须这样才能显示在日历中)。所以那些有“重复”类别的帖子仍然会出现,因为它们的类别“名称”不仅仅是“重复”,也是“事件”!
Wordpress函数query_post()没有帮助,因为我不仅需要按类别筛选(这query_post()需要),而且还需要能够指定查询返回的行只是那些在今天之后有开始日期的行(在wp_ec3_schedule表中有一个名为“start”的列列出了事件的开始时间)。
有什么建议吗?
谢谢。

最佳答案

我不确定我是否理解所有的事情,但是看看这个例子。这将列出my site上属于post_id类别但不属于how-todatabase类别的帖子。

SELECT  `object_id` AS PostID
FROM    `wp_term_relationships` AS r
        JOIN `wp_term_taxonomy` AS x ON x.`term_taxonomy_id` = r.`term_taxonomy_id`
        JOIN `wp_terms` AS t ON t.`term_id` = x.`term_id`
WHERE   x.`taxonomy` = 'category'
        AND `slug` = 'how-to'
        AND `object_id` NOT IN
           (
            SELECT `object_id`
            FROM `wp_term_relationships` AS r
            JOIN `wp_term_taxonomy` AS x ON x.`term_taxonomy_id` = r.`term_taxonomy_id`
            JOIN `wp_terms` AS t ON t.`term_id` = x.`term_id`
            WHERE   x.`taxonomy` = 'category'
            AND `slug` IN  ( 'database', 'code' )
            );

关于database - 如何在WordPress中过滤具有多个类别名称的帖子?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2122288/

10-11 02:47
查看更多