WP_Query с более чем одним post_type - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь запросить более одного типа сообщений. На самом деле я могу легко запросить более одного типа сообщения, разбить его на страницы и все такое, но позже я понимаю, что мне нужно получить только спецификацию c от одного типа сообщения, и теперь у меня проблемы с этим.

Out из двух post_type im, используя один обычный post, а другой event.

Я использую этот плагин для событий: https://wordpress.org/plugins/event-organiser/

Вот код, который я использую для запроса более двух типов сообщений.

$args = array(
                'post_type' => array('post','event'),
                'posts_per_page' =>$posts_per_page,
                'paged' => $paged
            );
    $post = new WP_Query($args);

Приведенный выше код работает нормально, пока я не попробую go запрос, где event - это >= текущая дата (означает только показать активные события, которые происходят сегодня или в будущем)

пожалуйста, дайте мне несколько предложений или помощи

Спасибо

Обновить

Вот новый $args

$args = array(
                'post_type' => array('post','event'),
                'posts_per_page' =>$posts_per_page,
                'paged' => $paged,
//                'meta_key' => '_eventorganiser_schedule_start_finish',
                'meta_query' => array(
                    'relation' => 'OR',
                    array(
                        'key' => '_eventorganiser_schedule_start_finish',
                        'value' => date('Y-m-d'),
//                        'value' => date('Y-m-d h:i:s', time()),
                        'type' => 'NUMERIC',
                        'compare' => '>='
                    ),
                    array(
                        'key' => '_edit_lock',
                        'compare'  => 'EXISTS'
                    )
                )
            );

Новый $args Создать следующий запрос:

SELECT SQL_CALC_FOUND_ROWS multi_posts.ID FROM multi_posts INNER JOIN multi_postmeta ON ( multi_posts.ID = multi_postmeta.post_id ) INNER JOIN multi_postmeta AS mt1 ON ( multi_posts.ID = mt1.post_id ) WHERE 1=1 AND ( ( multi_postmeta.meta_key = '_eventorganiser_schedule_start_finish' AND CAST(multi_postmeta.meta_value AS SIGNED) >= '2020-05-05' ) OR mt1.meta_key = '_edit_lock' ) AND multi_posts.post_type IN ('post', 'event') AND (multi_posts.post_status = 'publish' OR multi_posts.post_status = 'acf-disabled') GROUP BY multi_posts.ID ORDER BY multi_posts.menu_order, multi_posts.post_date DESC LIMIT 0, 9

Ну, он все еще не фильтрует события, срок действия которых истек.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Это то, что я использовал для получения своих результатов.

$args = array(
                'post_type' => array('post','event'),
                'posts_per_page' =>$posts_per_page,
                'paged' => $paged,
                'suppress_filters'=>false,
                'meta_query' => array(
                    'relation' => 'OR',
                    array(
                        'key' => '_eventorganiser_schedule_start_finish',
                        'value' => date('Y-m-d h:i:s', time()),
                        'type' => 'DATETIME',
                        'compare' => '>=',
                    ),
                    array(
                        'key' => '_eventorganiser_schedule_start_finish',
                        'compare'  => 'NOT EXISTS'
                    )
                )
            );

Думаю, поскольку post имеет _eventorganiser_schedule_start_finish, он работает нормально.

0 голосов
/ 05 мая 2020

Я думаю, ваш плагин также использует дату начала и окончания с мета-полем. Вам следует проверить базу данных и использовать мета-запрос. Это поможет вам получить событие, которое началось раньше сегодняшней даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...