Запрос постов и пользовательского типа записей с мета-ключом в WordPress

2 февр. 2013 г., 20:29:59
Просмотры: 15.2K
Голосов: 1

Я пытаюсь запросить пользовательский тип записи ai1ec_event из all-in-one-event-calendar и обычные записи WordPress для слайдера на главной странице. Это работает хорошо.

Теперь я хочу запросить только записи со значением пользовательского поля "teaser", но запрос возвращает только обычные записи, без событий.

<?php
query_posts( array(
'post_type'=>array('post','ai1ec_event'),   
'posts_per_page' => 50,
'meta_query' => array(
    array(
        'key' => 'teaser',
        'value' => 'on'        
    )
)
);
?>

Даже если я уберу параметр типа записи:

<?php
query_posts( array(
'meta_query' => array(
    array(
        'key' => 'teaser',
        'value' => 'on'        
    )
)
);
?>

запрос возвращает только посты, без событий.

0
Все ответы на вопрос 1
6

Боюсь, WP_Query не может получить (Записи с произвольным полем) или (ailec_even). Вам придется сначала запросить первый, затем второй и объединить эти массивы. Используйте WP_Query вместо query_posts.

Я только что проверил это на своей локальной установке, и этот код, вызываемый из index.php twentytwelve, работает (выводит запись с заголовком "Hello post" и ai1ec_event с заголовком "Event" - оба с произвольным полем "teaser" со значением "on"):

$events_query = new WP_Query( array('post_type' => array('ai1ec_event', 'post'), 'meta_query' => array( array( 'key' => 'teaser', 'value' => 'on' ) )) );
while ( $events_query->have_posts() ) :
    $events_query->the_post();
    echo get_the_title() . '<br/>';
endwhile;

Должен сказать, что оба (запись и событие) были созданы пользователем с правами администратора - я проверил код, и там есть обширная часть с пользовательскими возможностями.

2 февр. 2013 г. 21:08:57
Комментарии

Я не думаю, что это сработает. Я сообщил о некорректном поведении. Смотрите исправленный вопрос выше. Сначала я не заметил, но включение запроса по мета-ключу ВСЕГДА возвращает только посты.

Sebastian Starke Sebastian Starke
2 февр. 2013 г. 22:00:26

содержит ли ваш ai1ec_event пользовательское поле teaser?

david.binda david.binda
2 февр. 2013 г. 22:10:18

Да, содержит, и оно включено.

Sebastian Starke Sebastian Starke
2 февр. 2013 г. 22:12:00

Я только что проверил эту задачу на своей локальной установке - внес измененный ответ выше.

david.binda david.binda
2 февр. 2013 г. 22:39:12

Я проверил дважды: у меня возвращаются только посты. В чем может быть причина такого поведения?

Sebastian Starke Sebastian Starke
2 февр. 2013 г. 22:51:33

Я разобрался: точный синтаксис должен быть: 'meta_query' => array( array( 'key' => 'teaser', 'value' => '"on"', 'compare' => 'LIKE' ) ) Не уверен, сработал бы мой исходный код, но вы очень помогли, поэтому я отмечу ваш ответ как правильный. Спасибо!

Sebastian Starke Sebastian Starke
2 февр. 2013 г. 23:15:02
Показать остальные 1 комментариев