Как отфильтровать посты с несколькими именами категорий в WordPress? - PullRequest
1 голос
/ 23 января 2010

Я пытаюсь обойти плагин для Word Press под названием "Календарь событий 3" . Этот плагин позволяет создавать события и затем передавать их в таблицу SQL в базе данных Wordpress. Тем не менее, этот плагин не различает различные типы событий, например, повторяющиеся события, одноразовые события.

В начале моего решения было создать категорию под названием «Повторяющееся событие», и когда я создавал сообщение о событии, также помечал его как «Повторяющееся событие». Затем я попытался структурировать запрос, который возвращал бы сообщения, которые были отнесены к категории «События», но также исключал бы «Повторяющиеся события».

$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', в котором указано время начала события).

Есть предложения?

Thx.

1 Ответ

1 голос
/ 23 января 2010

Не уверен, что я все понимаю, но взгляните на этот пример. Это список post_id сообщений на моем сайте , которые находятся в категории how-to, но не в категориях database и code.

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' )
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...