Я знаю, как получить значение настраиваемого поля для конкретного поста.
get_post_meta($post_id, $key, $single);
Что мне нужно, это получить все значения, связанные с определенным настраиваемым ключом публикации, для всех сообщений .
Кто-нибудь знает эффективный способ сделать это? Я не хотел бы перебирать все идентификаторы постов в БД.
Пример:
4 сообщения с разными значениями для настраиваемого поля «Настроение». 2 сообщения имеют значение «счастливый», 1 сообщение имеет «гнев» и 1 сообщение имеет «грустный»
Я хочу выводить: по всем имеющимся у нас сообщениям: два счастливых, один злой и один печальный автор (ы).
Но для МНОГО постов.
То, что я ищу, это либо:
- Функция WP, чтобы получить это. или
- пользовательский запрос, чтобы получить это максимально эффективно.
custom-field
mikkelbreum
источник
источник
Ответы:
Один из возможных подходов заключается в использовании одного из вспомогательных методов в классе WPDB для выполнения более точного мета-запроса. Однако использование некоторых из этих функций заключается в том, что вы обычно не получаете простой массив данных и обычно вынуждены делать ненужные ссылки на свойства объекта, даже если вы вызываете только один столбец или строку.
Конечно, не все функции одинаковы, и целенаправленное упоминание относится к методу WPDB ,
get_col
который возвращает простой плоский массив запрашиваемых данных, я специально упомяну это, потому что следующий пример вызовет этот метод ,WordPress - WPDB Выбор столбца данных
$ wpdb-> get_col ()
Вот пример функции, которая запрашивает в базе данных все сообщения с выбранным типом сообщения, статусом сообщения и с определенным мета-ключом (или настраиваемым полем для менее технически мыслящих).
Так, например, если вы хотите выяснить, какие записи имеют мета-ключ рейтинга , для фильмов типа поста и хотите сохранить эту информацию в переменной, примером такого вызова будет:
Если вы хотите сделать только вывод данных на экран, функция взрыва PHP может быстро разделить этот простой массив на строки данных.
Вы также можете использовать возвращенные данные, чтобы определить, сколько сообщений имеют эти мета значения, например, выполнив простой цикл по возвращаемым данным и создав массив значений.
Эта логика может применяться к различным видам данных и расширяться для работы любым количеством различных способов. Поэтому я надеюсь, что мои примеры были полезны и достаточно просты для подражания.
источник
DISTINCT
сразу послеSELECT
функции, указанной выше. Может быть полезноЯ просто хотел бы добавить одну маленькую вещь в код t31os выше. Я изменил «SELECT» на «SELECT DISTINCT», чтобы исключить повторяющиеся записи, когда сам использовал этот код.
источник
Это не хорошо или не нужно использовать глобальный $ wpdb:
источник
самый быстрый способ был бы пользовательский запрос SQL, и я не уверен, но вы можете попробовать
Если что, то это начало.
источник
Для получения всех мета значений мета ключом
Проверьте wp-> db wordpress codex
источник
Нет никаких причин, по которым вы не можете объединить t31os и код Bainternet, чтобы получить готовый оператор многократного использования (стиль WordPress), который возвращает количество и значения в одной эффективной операции.
Это пользовательский запрос, но он все еще использует уровень абстракции базы данных WordPress - поэтому, например, не имеет значения, какие имена таблиц на самом деле, или если они меняются, и это подготовленный оператор, поэтому мы намного безопаснее от атак SQL и т. Д. ,
В этом случае я больше не проверяю тип сообщения и исключаю пустые строки:
В частности это
Это вернет массив объектов примерно так:
источник
Используйте следующее с foreach
Предполагается, что имя вашего настраиваемого ключа поля
источник