( Примечание модератора: исходное название вопроса было: «Пользовательский запрос: показать настраиваемые типы сообщений плюс настраиваемый тип сообщения с метаданными сообщения на главной странице блога»)
Мне нужна помощь с пользовательским запросом. У меня есть три настраиваемых типа сообщений: «Новости», «События», «Истории». На главной странице блога будут отображаться только новости и события. Клиент может пометить Историю как Новость, используя возможности плагина Verve Meta Boxes. Если пост в Stories имеет мета-ключ поста 'mark-as-news'
, то этот пост также должен отображаться на главной странице блога.
Итак, мне нужна помощь в написании вот этого:
Если в Stories есть метаданные постов,
'mark-as-news'
то на главной странице блога будут отображаться настраиваемые типы постов News и Events, а также Stories в порядке убывания.
Может кто-нибудь помочь?
Спасибо!
Редактировать:
Возможно, лучше было бы сформулировать это?:
Показывать пользовательские типы сообщений «Новости» и «События», а если есть ключ
'mark-as-news'
дляpost_meta
, показывать «Истории».
Привет @webcodeslinger:
Вот как будет выглядеть базовый запрос MySQL для загрузки новостей и событий (это сильно упрощено по сравнению с тем, что на самом деле делает WordPress):
Вместо этого вам нужно что-то вроде этого (в MySQL есть более эффективные способы сделать это, но они более сложны в WordPress, и для большинства сайтов вы никогда не заметите разницы):
Итак… чтобы добавить этот дополнительный SQL к запросу вашего основного цикла, используйте
'posts_where'
хук. Вы можете поместить следующий код ловушки вfunctions.php
файл вашей темы (подойдет внизу файла) или в один из.php
файлов плагина, если вы создаете плагин:Не повлияет ли это на большее количество запросов, чем только на домашнюю страницу? Вроде обычный крючок.
@Rarst — Вы абсолютно правы, это ускользнуло от меня. Я исправлю. Кстати, именно об этом я говорил здесь: core.trac.wordpress.org/ticket/15063
Большое спасибо, Майк. И спасибо, что сделали мой вопрос более осмысленным. Пожалуйста, простите мою глупость, но я понятия не имею, что делать после добавления этого кода в мой файл functions.php.
Насколько я могу судить, это также ответ на вопрос «Каков наилучший способ изменить WP_Query по умолчанию, не затрагивая последующие почтовые запросы. $query===$wp_the_query — это то, что я не осознавал, что это возможно 🙂
@Jeremy Clarke — @Denis-de-Bernardy
$query===$wp_the_query
недавно предложил мне на trac, так что реквизит идет к нему.Спасибо, Рарст. По вашему мнению, учитывая, что два из этих настраиваемых типов сообщений нуждаются в настраиваемых полях, было бы лучше, если бы они были категориями, а не пользовательскими типами сообщений? Спасибо!
@webcodeslinger — Для того, что вы хотите, вы добавили бы сложности к SQL, необходимому, если бы вы использовали категории, и вы потеряли бы все преимущества пользовательских типов сообщений.
@MikeSchinkel — Спасибо, я так и думал.
То, что вы хотите, легко описать, но сложно заставить работать с WP API. Я не видел красивого и аккуратного решения до сих пор.
По сути, WP-запрос — это причудливая оболочка для SQL-запроса, которая получает строки сообщений из базы данных. То, что вам нужно, — это практически два разных запроса для двух разных наборов сообщений. В настоящее время WP не обрабатывает такую логику ИЛИ в запросах.
Вы можете сделать два запроса и объединить результаты, но в этом случае будет сложно правильно разбить страницы.
Вероятно, это одна из причин, по которой темы в стиле журналов стали популярными, потому что они специализируются на показе нескольких наборов сообщений в нескольких областях, а не на сложном сочетании контента.