Вызывается настраиваемое поле, startDate
но только для нескольких событий. Мне было интересно, не установлен ли он для сообщения, которое я мог бы использовать post_date
для создания списка сообщений?
// if meta_key _postmeta.startDate isn't set get the rest by posts.post_date
query_posts(
array(
array(
'posts_per_page' => 10,
'meta_key' => 'startDate',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'ASC'
),
array(
'meta_key' => 'post_date',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<'
)
)
);
post_date является настраиваемым полем?
я предполагаю, что это опубликованное поле wordpress по умолчанию, хотя может быть неправильно? В любом случае, я хотел бы использовать дату по умолчанию…
хорошо, так что это не метаполе, а в таблице сообщений
Исправлены ваши аргументы запроса, надеюсь, это не исказило то, что вы иллюстрировали, пожалуйста, не стесняйтесь вернуться, если это необходимо.
ура t31os — отредактировал еще раз, чтобы было понятнее. Нужно, чтобы выбрать контент старше, чем СЕЙЧАС, используя startDate, и если startDate не был установлен, используйте дату публикации по умолчанию post_date.
Очень элегантное решение, я бы не додумался до такого использования COALESCE. Я бы просто посоветовал не использовать префикс wp_ по умолчанию и вместо этого использовать {$wpdb->prefix}…
@goldenapples: Да, вы могли бы обобщить его, но он уже настолько специфичен для этого запроса (он испортит другие запросы с мета-частью), что я подумал, что в этом нет необходимости.
Спасибо Ян — это откровение! Все еще разбираетесь с wordpress и задаетесь вопросом, где это называется на моей странице? И как мне его «отцепить»? т.е. // $theQuery… then ?
@daniel: Вы можете поместить функции в
functions.php
файл вашей темы. Затем прямо перед выполнением запроса вы размещаете двеadd_filter()
строки. После запроса вы пишетеremove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
, чтобы удалить их снова.ах — теперь все это имеет смысл и работает! Большое спасибо, Ян. Это будет полезно…
Если вы можете объяснить это на SQL, вы можете запросить это! Есть три места, где мы хотим изменить запрос по умолчанию:
Соединение и предложение where добавляются через функцию
_get_meta_sql()
. Вывод фильтруется, поэтому мы можем подключиться к нему:Предложение заказа фильтруется через
posts_orderby
:Это дает нам следующий SQL-запрос:
Не забудьте отключить фильтры после выполнения запроса, иначе вы испортите и другие запросы. И, если возможно , вы должны не называть
query_posts()
себя, а изменить основной пост-запрос, который делает WordPress при настройке страницы.