У меня есть 2 пользовательских типа записей «закладки» и «фрагменты» и общий тег таксономии. Я могу создать список всех терминов в таксономии с помощью get_terms (), но я не могу понять, как ограничить список типом записи. В основном я ищу что-то вроде этого:
get_terms(array('taxonomy' => 'tag', 'post_type' => 'snippet'));
Есть ли способ добиться этого? Идеи очень ценятся!
О, я на WP 3.1.1
custom-post-types
custom-taxonomy
terms
Гэвин Хьюитт
источник
источник
print_r(get_terms_by_post_type(array('category') , array('event') ));
шоуWarning: Missing argument 2 for wpdb::prepare()
Так случилось, что мне нужно что-то подобное для проекта, над которым я работаю. Я просто написал запрос, чтобы выбрать все сообщения пользовательского типа, а затем проверяю, какие именно термины моей таксономии они используют.
Затем я получил все условия использования этой таксономии,
get_terms()
а затем я использовал только те, которые были в обоих списках, обернул их в функцию, и все было готово.Но тогда мне нужно было больше, чем просто идентификаторы: мне нужны были имена, чтобы я добавил новый аргумент с именем,
$fields
чтобы я мог сказать функции, что возвращать. Затем я решил, что онget_terms
принимает много аргументов, и моя функция была ограничена просто терминами, которые используются типом записи, поэтому я добавил еще одинif
утверждение, и все:Функция:
Использование:
Если вам нужен только список идентификаторов терминов, то:
Если вам нужен только список имен терминов, то:
Если вам нужен только список объектов термина, то:
И если вам нужно использовать дополнительные аргументы get_terms, такие как: orderby, order, иерархический ...
Наслаждайтесь!
Обновить:
Чтобы привязать количество терминов к конкретному изменению типа сообщения:
чтобы:
источник
(array) $args
список из 4 $? Это позволит вам не заботиться о порядке, в котором вы добавляете аргументы, что-то вроде,get_terms_by_post_type( $args = array( 'taxonomies', 'args', 'post_type', 'fields' => 'all') )
а затем вызывать их внутри функции с помощью$args['taxonomies']
. Это поможет вам избежать добавления пустых значений и запоминания порядка ваших аргументов. Я бы также предложил использовать одинарные кавычки вместо двойных. Я видел, как они в пять раз быстрее.'this is my mood: '.$value
более"this is my mood: $value"
, из - за удобство чтения. Когда дело доходит до скорости: это не слегка - я измерял до пяти раз. И когда вы везде используете двойные кавычки во всей своей теме, они быстро подведут итог, когда вы получите много запросов. Во всяком случае, хорошо, что вы это ясно дали понять."
против'
и был неправ. Разница далеко за пределами того, что кто-нибудь заметит.Я написал функцию, которая позволяет вам передать
post_type
в$args
массив вget_terms()
функции:HT для @ Braydon для написания SQL.
источник
Отличный вопрос и твердые ответы.
Мне действительно понравился подход @jessica, использующий фильтр term_clauses, потому что он расширяет функцию get_terms очень разумным способом.
Мой код является продолжением ее идеи, с некоторыми sql от @braydon, чтобы уменьшить дубликаты. Это также позволяет использовать массив post_types:
Поскольку в get_terms нет предложения для GROUPY BY, мне пришлось добавить его в конец предложения WHERE. Обратите внимание, что у меня установлен очень высокий приоритет фильтра, в надежде, что он всегда будет последним.
источник
Я не смог заставить аргументы get_terms работать с версией кода Гевина, описанной выше, но в конце концов изменил
в
как это было в оригинальной функции от Bainternet.
источник
@Bainternet: Спасибо! Мне пришлось немного изменить функцию, потому что она не работала (некоторые опечатки). Единственная проблема сейчас в том, что срок отсчета выключен. Счет не учитывает тип записи, поэтому я не думаю, что вы можете использовать get_terms () в этом.
РЕДАКТИРОВАТЬ: Добавлено исправление (я). Но почему-то это все еще не работает для меня. Счет по-прежнему показывает неправильное значение.
источник
print_r(get_terms_by_post_typea(array('event','category','',array()));
этот даетWarning: Invalid argument supplied for foreach()
за линиюforeach ($current_terms as $t){
Избегайте дубликатов:
источник