Как получить записи не прикрепленные к таксономии
Пользовательский запрос типа записей WP не возвращает пользовательскую таксономию
У меня есть следующий CPT:
и следующая таможенная таксономия, которая отображается в статьях CPT:
Теперь я пытаюсь создать файл single-article.php, в котором я запрашиваю одну статью, чтобы включить всю информацию о пользовательских таксономиях.
Я перепробовал все варианты:
Я относительно новичок в PHP & WP и не на 100% уверен, как получить данные. В Javascript вы получите объект обратно, через который можно пройти. При добавлении print_r($my_query) я не получаю обратно то, что ищу. Ранее в документе я уже инициировал цикл:
но я не могу понять, почему php/wp не показывает все данные, включенные в объект. В идеале я хочу запросить только одну статью и получить все данные обратно, чтобы включить информацию обо всех прикрепленных таксономиях. Я не хочу запрашивать статьи по таксономии. У меня два вопроса:
1) Как правильно запросить это, чтобы получить результаты обратно? 2) Как я могу отобразить эти данные на веб-интерфейсе?
Редактировать: в соответствии с этим tax_query игнорируется, когда is_singular() имеет значение true. print_r( is_singular() ) приводит к 1 (иначе правда?!), это будет иметь значение?
У меня также есть пользовательские типы сообщений, прикрепленные к таксономиям. Мне нужно также получить эту информацию.
Ваш таксономия пробкового является author НЕ authors
Вы можете использовать single-
И, если вы зарегистрировали свой тип записи с аргументом has_archive, установленным в true, то вы можете использовать archive-
Создание таксономий для произвольных типов записей WordPress
Здравствуйте уважаемые читатели блога WP Developer. В прошлой статье я рассказывал о таксономиях: что это такое, привел пример стандартных таксономий в WordPress и описал как добавить таксономию к записям. Сегодня я хотел бы поговорить о том, как создавать таксономии для произвольных типов записей. Алгоритм создания таксономий для стандартных и произвольных типов записей схож, за исключением небольших нюансов. Но, в общем, об этом ниже.
Шаг 1. Создание произвольного типа записей
Первым делом необходимо создать новый произвольный тип записей. В нашем примере назовем его Магазин . Для этого в файл functions.php Вашей темы необходимо добавить следующий код.
После добавления данного кода в админ-панели мы сможем увидеть новый пункт меню, как показано на рисунке ниже.
Если Вы хотите, чтобы созданный тип записей отображался в навигационном меню, то не забудьте элементу show_in_nav_menus присвоить значение true .
Шаг 2. Создания таксономии
На этом шаге мы должны создать новую таксономию и связать ее с только что созданным новым типом записей — Магазин . Для этого в файл functions.php добавьте следующий код.
На строке 34 текущего кода мы указали название для новой таксономии, а на строке 35 связали ее с новым типом записей — shop . Теперь меню с разделом Магазин в админ-панели выглядит так, как показано на рисунке ниже.
Как видно из рисунка, появился новый подпункт под названием Товары . Это как раз и есть добавленная нами таксономия. Вид добавления поста для нового типа записей выглядит так:
Справа появился новый блок Товары , в который я добавил рубрику Часы . А вот так выглядит навигационное меню, когда в него добавлены наш произвольный тип записей и новая таксономия:
Не забудьте перейти в Настройки экрана и включить чекбоксы для Вашей новой таксономии и нового произвольного типа записей, иначе они могут не отображаться в меню.
Шаблон вывода для произвольной таксономии
Настройки ЧПУ (постоянных ссылок)
Здесь изначально я советую пройти в ЧПУ (Настройки->Постоянные ссылки) . Желательно, чтобы настройки были примерно такими /%category%/%postname%.html или /%postname%/ . На рисунке ниже показано, как сделано у меня.
Создание шаблона для произвольной таксономии
Теперь, когда мы настроили постоянные ссылки, пришла пора создания шаблона для нашей таксономии. Лично я использую 3 способа создания таких шаблонов, а точнее 3 способа их названия. Ниже они описаны согласно приоритету поиска CMS WordPress:
- taxonomy-
— .php — значения в скобках расшифровываются так taxonomy-<название-таксономии>—<название-термина-таксономии>.php . Например, можно назвать шаблон taxonomy-goods-clock.php и он будет выводить статьи из таксономии goods , термином которой является clock (часы) ; - taxonomy-
.php — taxonomy-<название-таксономии>.php . Например, taxonomy-shop.php ; - taxonomy.php — использую реже всего, если знаю, что заведомо на сайте будет только одна таксономия.
Остается добавить в файл код вывода и все будет работать.
Шаблон вывода для произвольных типов записей
В своей практике я использую 2 вида названия шаблонов для вывода поста из произвольных типов записей:
SEO Маяк
Блог Виталия Кириллова | Все о создании,
продвижении сайтов и заработке в интернете
Создание и продвижение сайтов, заработок в интернете
get_terms()
С помощью функции get_terms() можно получить элементы таксономий и настроить их вывод на экран.
Работает на основе класса: WP_Term_Query() .
Применение:
$args (строка/массив ) — аргумент или массив аргументов, которые может принимать функция (необязательно) .
По умолчанию: Стандартный массив объектов для таксономии ‘category’.
$deprecated (строка/массив) — если указать второй параметр, то будет задействована устаревшая версия функции (необязательно) .
По умолчанию: нет
$taxonomia (строка/массив) — название таксономии, элементы которой надо получить (обязательно) .
По умолчанию: нет.
$args (строка/массив) — аргумент или массив аргументов (необязательно) .
По умолчанию: Стандартный массив аргументов.
Поэтому с версии WP 4.5 второй параметр в функции указывать не обязательно, а название таксономии можно прописать, как значение аргумента taxonomy в первом массиве $args.
Шаблон функции со всеми аргументами
Аргументы массива $args
‘taxonomy’ => ‘my_tax’, (строка/массив) — Название таксономии, элементы которой требуется получить (обязательно) .
Также можно указать массив имен: ‘taxonomy’ => array( ‘my_tax’, ‘my_tag’ ) .
По умолчанию: нет.
‘orderby’ => ‘name’, (строка) — Метод сортировки термов (необязательно) .
‘id’ или ‘term_id’ — сортировка по id.
‘name’ — по названию элемента.
‘count’ — по количеству записей.
‘slug’ — по ярлыку элемента.
‘term_group’ — по группе (внедрение не завершено, использование не рекомендуется).
‘parent’ — по значению аргумента parent.
‘include’ — в строгом порядке указанном в аргументе include.
‘slug__in’ — в строгом порядке указанном в аргументе slug.
‘description’ — по первым буквам краткого описания в алфавитном порядке.
‘meta_value’ — по значению аргумента meta_value.
‘meta_value_num’ — по значению аргумента meta_value, если значение является числом, а не строкой.
‘Ключ_запроса’ — сортировка по ключу (key) из аргумента meta_query.
‘none’ — не проводить сортировку.
По умолчанию: ‘name’.
‘order’ => ‘ASC’, (строка) — направление сортировки (необязательно) .
‘ASC’ — по возрастанию (1, 2, 3; a, b, c).
‘DESC’ — по убыванию (3, 2, 1; c, b, a).
По умолчанию: ‘ASC’.
‘hide_empty’ => true, (логическое) — Исключать/Не исключать из результата термы, за которыми нет закрепленных записей. (необязательно) .
true — не исключать.
false — исключить.
По умолчанию: true.
‘exclude’ => », (число/массив) — >(необязательно) .
По умолчанию: ‘ ‘ (нет).
‘exclude_tree’ => », (число/массив) — >(необязательно) .
По умолчанию: ‘ ‘ (нет).
‘include’ => », (число/массив) — >(необязательно) .
‘number’ => », (число) — число, ограничивающие количество элементов, которые требуется получить (необязательно) .
По умолчанию: ‘ ‘ (будут получены все элементы указанной таксономии).
‘fields’ => ‘all’, (строка) — значение этого аргумента определяет какие данные будет возвращать функция (необязательно) .
all — вернуть массив со всеми данными об элементах указанной таксономии.
ids — вернуть массив идентификаторов (id).
names — вернуть массив названий элементов.
count — вернуть количество найденных термов.
id=>parent — вернуть ассоциированный массив, где ключ является id терма, а значение — id родительского терма. Если родителя нет, то будет возвращен 0.
id=>slug — вернуть массив, где ключ — id терма, а значение — ярлык терма.
id=>name — вернуть массив, где ключ — id терма, а значение его название.
По умолчанию: ‘all’.
‘slug’ => ‘all’, (строка/массив) — Здесь можно указать ярлык или массив ярлыков элементов, по которым будет осуществляется выборка (необязательно) .
‘parent’ => ‘all’, (число) — Получить дочерние элементы по >(необязательно) .
‘hierarchical’ => true, (логическое) — Включать/Не включать в результат пустые родительские термы, но у которых есть не пустые дочерние элементы (с закрепленными записями) (необязательно) .
true — включать.
false — не включать.
По умолчанию: true.
‘child_of’ => true, (число) — Включить в результат все дочерние элементы только того родительского терма, >(необязательно) .
‘childless’ => true, (логическое) — При значении true получит термы, у которых нет потомков (необязательно) .
true — термы без потомков.
false — все термы.
По умолчанию: false.
‘get’ => », (строка) — Если задать ‘all’ — то автоматически изменятся значения аргументов: childless, child_of, h >(необязательно) .
‘name__like’ => », (строка) — Получит все термы, в названиях которых найдется указанная строка. Выборка может происходить даже по одному символу (необязательно) .
‘description__like’ => », (строка) — Получит все термы, в описаниях которых найдется указанная строка (необязательно) .
‘pad_counts’ => false, (логическое) — Суммировать или не суммировать количество записей в родительских и дочерних категориях (необязательно) .
true — Суммировать.
false — Не суммировать.
По умолчанию: false.
‘offset’ => », (число) — Верхний отступ в запросе. Число в значении означает сколько первых элементов будет пропущено (необязательно) .
‘search’ => », (строка) — Получит все термы, в названиях или ярлыках которых будет найдено указанное слово. Выборка будет происходить по словам, а не по символам, как в аргументе ‘name__like’ (необязательно) .
‘name’ => », (строка/массив) — Получит все термы, названия которых будут полностью совпадать с указанным значением. Выборка будет происходить полному названию терма (необязательно) .
‘cache_domain’ => ‘core’, (строка) — Уникальный ключ кеша, который позволяет не перезаписывать кеш для одинаковых запросов, если функция get_terms() используется несколько раз (необязательно) .
По умолчанию: ‘core’.
‘update_term_meta_cache’ => true, (логическое) — Подгружать или не подгружать кеш метаданных (необязательно) .
true — Подгружать (кеш будет подгружаться только для полученных элементов).
false — Не подгружать.
По умолчанию: true.
‘object_ids’ => 9, 12, 57, (число/массив) — >object_id в таблице wp_term_relationships (необязательно) .
По умолчанию: все id записей закрепленных за термом.
‘term_taxonomy_id’ => », (число/массив) — Здесь можно указать >(необязательно) .
‘meta_query’ => », (массив) — Получение данных по полям meta_key и meta_value таблицы wp_termmeta (необязательно) .
‘meta_key’ => », (массив) — Получение данных по полю meta_key (необязательно) .
‘meta_value’ => », (массив) — Получение данных по полю meta_value (необязательно) .
‘suppress_filter’ => false, (логическое) — Отключить/Не отключать работу хука get_terms для текущего запроса (необязательно) .
true — Отключить хук.
false — Не отключать хук.
По умолчанию: false.
Возвращаемые значения
Если значение аргумента fields осталось по умолчанию, то на каждом витке цикла foreach($terms as $term) :
Переменная $term будет принимать следующие данные:
term_id — id терма.
name — название терма.
slug — ярлык.
term_group — группа.
term_taxonomy_id — id таксономии.
taxonomy — название таксономии.
description — описание терма.
parent — id родителя.
count — количество прикрепленных записей.
filter — тип фильтрации.
Хуки функции
В арсенале функции get_terms() предусмотрен одноименный хук-фильтр get_terms.
Примеры использования
1. Получим все категории, упорядоченные по количеству записей.
2. Выведем названия всех термов в виде списка.
3. Выведем все категории и подкатегории в виде выпадающего списка:
4. Пример работы с мета-полями.
Выведем дочерние термы с миниатюрами на странице родителя по значению аргумента meta_query (подробнее здесь).
На основе get_terms() работают функции: get_categories(), wp_count_terms(), wp_get_nav_menus(), get_tags(), get_term_by(), get_all_category_ids().
Регистрируем произвольную таксономию для пользователя WordPress
Функционал произвольных таксономий был представлен в версии WordPress 2.9. Он позволяет создавать произвольные группы для записей, страниц и произвольных типов записей.
Представим, что вам нужно создать сайт с каталогом книг и вы уже сделали произвольный тип записей для публикации Книг. Используя произвольные таксономии в можете создать для них, например, Жанр. С таксономией Жанр можно сделать множество элементов типа Фантастика, Детская литература или Биографии для группировки Книг.
К сожалению, мы не можем зарегистрировать произвольную таксономию для Пользователей, таким простым способом как это делается для других типов записей. Однако, мы можем назначить дополнительные свойства пользователя, такие как занятия, профессия или должность вместо регистрации новой Роли Пользователя. Также это дает возможность делать выборку пользователей на основе назначенных им таксономий.
Если такая идея поможет вашему сайту, то сегодняшняя статья — для вас.
Вступление
Первым делом вам необходимо установить и активировать плагин User Taxonomies для того, чтобы упростить работу.
После активации переходим на сайт GenerateWP для того, чтобы сгенерировать коды таксономий. Поместите полученный код в файл functions.php вашей темы. Нижеприведенный код — это пример. Он немного урезан, чтобы не увеличивать объем статьи. Полный же код можно посмотреть по ссылке.
Теперь изменяем параметр Post Type в следующей строке:
…с post на user, таким вот образом:
Теперь переходим в админку и ищем новое меню в разделе Пользователи как на скриншоте ниже.
Назначаем произвольную таксономию
Переходим в новое меню и создаем несколько термов. Для этого примеры мы создали два элемента: CEO и Менеджеры.
Далее переходим в раздел редактирования пользователя и назначим ему один элемент таксономии.
Выборки пользователей
Мы выведем пользователей в теме в зависимости от назначенного терма таксономии. Но прежде давайте создадим новый шаблон страницы. Мы добавим соответствующий в этот новый шаблон.
В этом конкретном случае мы не будем выполнять запросы к пользователям с помощью get_users или WP_User_Query; когда мы создаем новый класс WP_User_Query, он не выведет Произвольные Таксономии, назначенные пользователю. Justin Tadlock в своей статье показывает как использовать вместо этого функцию get_objects_in_term.
Эта функция выводит ID объекта (а в нашем случае объект означает пользователя), связанного с термом. Для того, чтобы использовать ее, нам необходимо два параметра: Term ID и название таксономии. Term ID можно найти в ссылке браузера при редактировании как на скриншоте ниже:
После того, как вы нашли ID, поместить его в функцию следующим образом:
Можно использовать var_dump() для вывода ID полученных объектов. В нашем случае он возвращает пользователей с ID 1 и 3.
Используя эти ID, мы также можем получить, например, имя пользователя и аватар.
…и, наконец, вот он результат.
Вот и все. Не стесняйтесь изменять код под свои нужды. Мы надеемся, что эта статья помогла вам зарегистрировать произвольную таксономию для пользователя WordPress.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.
Как добавить в таксономию метки?
помогите пожалуйста в код добавить метки для таксономии (я просто новичек сильно не пинайте)
Link на текущую таксономию
Здравствуйте. Подскажите пожалуйста, как получить ссылку на текущую таксономию? Вобщем есть.
Замена рубрик в ссылке записи, на свою таксономию
Добрый день! Помогите решить такой вопрос, по умолчанию в WP при создании нового поста странице.
Как вывести метки в сайдбаре не облаком, а таким же видом как и рубрики?
Доброго времени суток. Подскажите как вывести метки в сайдбаре не облаком, а таким же видом как и.
Как вывести метки постов в футере?
Как в футере вывести метки постов? Спасибо.
Как в Wordpess получать UTM метки Google?
Привет! Кто-нибудь знает, каким образом плагин формы отправки должен передавать UTM метки? Спасибо.
Как в WordPress получить свой тип записей отфильтровав по нужной таксономии
Для того что бы в ВордПресс получить свой тип записей отфильтрованных по кастомной таксономии (или существующей), воспользуйтесь следущим снипеттом:
Что мы имеем. Первое:
ищем в БД записи типа «my-post-type».
в тот же запрос, добавляем фильтрацию по таксономии типа «my-taxonomy», slug которой равен «event».
Добавляем в фильтр ограничение по мета полям, где дата события «event_date» больше текущей даты, и где данная запись не находится в архиве:
Таксономии
Буквально на днях я обнаружил, что у меня на блоге есть множество статей, так или иначе связанных с таксономиями, а также описания различных функций для работы с ними, но такого главного, обобщающего поста просто нет .
Начну с того, что таксономии нужны для группировки постов.
Каким образом? Ну возьмём к примеру хэштеги в инстаграм — когда вы постите фото и присваиваете ему теги — это как раз и есть та самая группировка, о которой я говорю. По умолчанию WordPress тоже поддерживает теги для постов, а ещё рубрики. И их можно объединить одним словом — таксономии.
В WP есть стандартные таксономии, а также те, которые разработчики и пользователи создают сами.
1. Стандартные таксономии в WordPress
Рубрики и метки
Что-то мне подсказывает, что если вы читаете этот пост, то вы уже представляете, что такое рубрики (категории) и метки (теги), что у рубрик есть иерархия, у меток нет и так далее.
А теперь мне нужно донести одну важную мысль.
В WordPress есть своя группа функций для работы с рубриками и отдельная группа функций для работы с метками. Наверняка с какими-то из них вы уже знакомы.
Чуть выше мы с вами определили, что и рубрики и метки являются таксономиями, а это значит, что при работе как с теми, так и с другими вы можете спокойно использовать функции таксономий. Я например так и делаю.
Рубрики ссылок
Если рубрики и метки в WordPress были нужны для группировки записей, то данная таксономия, как понятно из названия — для группировки ссылок.
Если вы недавно установили WP, то вы не найдёте их у себя в админке. Дело в том, что с версии 3.5 ссылки по умолчанию сделали отключенными. Но не удалили — вставьте следующий код в файл functions.php вашей темы и ссылки вновь появятся у вас в админке. Вполне возможно, что вы найдете им применение.
Форматы постов
Форматы на самом деле с трудом можно назвать таксономией, но фактически это так. На моём блоге им посвящён отдельный пост.
2. Пользовательские таксономии
И вот в один прекрасный день наступает момент, когда нам начинает не хватать стандартных рубрик и меток для группировки записей…
Чуть подробнее про регистрацию таксономии
Техническую сторону регистрации я подробно описал в статье про функцию register_taxonomy(). Сейчас же мы рассмотрим несколько моментов.
-
Регистрация таксономии бывает нужна, когда требуется добавить еще один критерий группировки постов, в особенности — произвольных типов постов.
Пример: вы зарегистрировали тип записей — Автомобили, и их нужно группировать скажем по марке, стране и по объему двигателя (хотя объем лучше затолкать в произвольные поля).
Как присваивать таксономии к различным типам записей
Ну во-первых, если вы сами регали таксономию через код, то конечно же надо было сразу указать все типы записей, для которых будет использована группировка по этой таксономии.
Если же изменение параметров регистрирующей функции не в вашей власти (возьмем те же рубрики и метки), тогда вы можете и должны использовать register_taxonomy_for_object_type().
Допустим вы взяли и захотели, чтобы в рубрику можно было добавлять не только записи но и страницы! Тогда код будет следующим:
Другие примеры смотрите в описании функции, ссылку на которое я дал вам выше.
Вывод таксономий в виде списка
Вы знакомы с функцией wp_list_categories()? Если нет, то наверняка видели, как на блогах рубрики выводятся в столбик в виде списка (иногда еще справа в скобках указывается количество постов в рубрике).
Самое интересное, что функция wp_list_categories() позволяет выводить элементы любой таксономии, достаточно лишь указать название таксономии в параметрах функции.
Где же брать название таксономии?
- Если таксономию создавали вы сами, то этот вопрос у вас не должен возникать.
- Если же нет, то просто откройте страницу этой таксономии и посмотрите на ссылку в браузере:
Более сложный, но в то же время более удобный и настраиваемый вариант — функция get_terms(). Если бы мне предложили выбрать любимую функцию из кодекса, я бы выбрал её — она реально потрясающая.
Вывод постов из таксономии
Тут нам безусловно поможет WP_Query с параметром tax_query . Подробное описание и примеры смотрите здесь.
3. Плагины для работы с таксономиями
Сам я придерживаюсь мнения, что в данном случае лучше обойтись без лишних плагинов, тем не менее вот некоторые бесплатные варианты:
- Simple Taxonomies by Yoast,
- Pods,
- Types.
Некоторые из функций для работы с таксономиями
Впервые познакомился с WordPress в 2009 году. С 2014 года меня можно встретить на WordCamp по всему миру — официальной конфе по WordPress, иногда там выступаю, но с 2020 выступаю только на тех, которые сам организовываю. Также периодически школа Epic Skills и LoftSchool приглашают меня вести у них уроки/вебинары.
Если вам нужна помощь с вашим сайтом или может даже разработка с нуля — пишите мне.
Добавляем рубрику, свою таксономию и метки для медиафайлов WordPress
Вас не раздражает, что WordPress не позволяет присвоить рубрику или метки вашим изображениям или загруженным файлам?
Представьте, как это могло бы быть полезно: вы могли бы создать динамические галереи изображений из отдельных мест или отдельных типов (пейзажи, абстракция), или вы могли бы создать страницы-списки для сайтов с большим количеством прикрепленных PDF файлов.
| Скачать исходники |
Хорошая новость: это на удивление просто сделать! Вы сможете добавить рубрики и метки к вашим прикрепленным файлам, добавив простой код в файл functions.php вашей темы или плагин, вы также сможете создать свою таксономию, которая будет применима к прикрепленным файлам.
В этом руководстве я покажу вам, как это сделать и очень быстро — это займет не больше 10 минут!
Что такое таксономия?
Таксономия — одно из слов, которые большинство людей никогда не слышат и не используют. В принципе, таксономия — способ группировать вещи.
Например, есть набор разных видов животных. Я могу группировать их вместе по разным характеристикам и затем присвоить этим группам имена. С этим большинство сталкивается на школьных уроках биологии и это не что иное, как таксономия.
В WordPress «таксономия» — механизм группирования для некоторых записей (или ссылок, или типов постов).
Что вам нужно, чтобы применить это руководство
- Установленный WordPress.
- Доступ к файлу functions.php вашей темы или FTP доступ, чтобы вы могли создать или загрузить плагин.
- Текстовый редактор.
Обратите внимание: Я рекомендую для добавления этих возможностей на сайте создавать плагин, так как он не зависит от темы и может понадобиться вам, если вы решите сменить тему в будущем. Конечно, добавление кода в файл темы тоже будет работать.
Подготовка: Редактирование медиа
Страница редактирования медиафайлов сама по себе достаточно бедна, там нет рубрик, меток или таксономий:
По умолчанию у вас нет возможности выбрать какую-то существующую рубрику или метку — но вы можете это изменить.
Применение рубрик
Первый шаг — включение рубрики для прикрепленных файлов. Вы можете сделать это с помощью функции register_taxonomy_for_object_type() . В файл плагина или файл functions.php вашей темы добавьте следующее:
Сохраните файл и обновите страницу редактирования медиа. Вы увидите, что рубрики теперь доступны:
Также колонка для рубрик появится в медиа-библиотеке, как видите:
Применение меток
Если вы предпочитаете работать с метками, а не с рубриками (или и с тем, и с другим), вы можете использовать ту же функцию. Добавьте следующий код в файл темы или плагина:
Подобно предыдущему варианту, это добавит метки на страницу редактирования медиафайлов:
Это также добавит колонку меток в медиа-библиотеку:
Копнем глубже: своя таксономия
Может случиться, что вы не захотите работать с существующими рубриками или метками при классификации ваших медиафайлов, в таком случае вы можете зарегистрировать свою таксономию и применить ее к типу записи ‘attachment’.
В примере выше я добавил к моему изображению метку, чтобы показать, откуда оно было взято. Допустим, я хочу создать иерархическую таксономию под названием ‘Locations’, которую я смогу использовать для классификации и отображения всех моих изображений.
Вы можете сделать это с помощью функции register_taxonomy() . Добавьте в файл темы или плагина следующее:
Этот код создаст новую иерархическую таксономию, которая будет использоваться только для прикрепленных файлов.
Если вы хотите применить ее для других типов контента, вам нужно заменить параметр ‘attachment‘ в функции register_taxonomy() на массив, содержащий сокращения для всех типов контента, которые вы хотите включить.
Теперь страница редактирования медиафайлов отображает новую таксономию:
Поскольку в свой код я включил аргумент ‘show_admin_column‘, страница медиа-библиотеки тоже ее включает:
Все! Теперь у вас есть рубрики, метки и свой тип записи для работы с прикрепленными медиафайлами.
Итог и использование этого подхода
Как вы увидели, вы можете применить рубрики и метки к прикрепленным медиафайлам, используя функцию register_taxonomy_for_object_type() . Вы также можете создать новую таксономию с помощью register_taxonomy() и применить ее к прикрепленным файлам (только к ним или также к другим типам контента).
Применение таксономий (в т.ч. рубрик и меток) к прикрепленным файлам можно использовать на практике:
- Создать свой шаблон attachment.php чтобы отображать прикрепленные изображения в виде галереи, используя страницы архива для отображения изображений из разных рубрик.
- Создать файл шаблона для отдельных таксономий или терминов для разного отображения прикрепленных изображений — например используя таксономию ‘location’ вы можете создать файл шаблона location-uk.php чтобы показывать архив изображений из UK в каком-то специфическом стиле.
- На сайте с большим количеством прикрепленных PDF файлов вы можете разбить их по категориям и использовать страницы архива для отображения этих файлов по теме, разделу, типу — так, как будет нужно вашему проекту.
- В файле шаблона для определенной таксономии помимо списка записей по теме отображать список на все прикрепленные файлы с прямыми ссылками на файлы — вам нужно будет использовать для этого всего два запроса.
Для всего этого есть много применений — в принципе это значит, что вы можете работать с прикрепленными файлами точно так же, как с записями, делая запросы и отображая архивы множеством способов.
Источник: WP.tutsplus.com
Насколько полезным был этот пост?
Нажмите на звезду, чтобы оценить этот пост!
Средний рейтинг: 5 / 5. Количество голосов: 1
Создание произвольных типов записей и таксономий
Создаём произвольную таксономию для новостей в WordPress. В данной инструкции будет создан новый тип записей «Новости» и функционал для него. В том числе создание новых рубрик (разделов) для Новостей.
В предыдущем материале уже описывалось создание новой таксономии (категории) для записи в WordPress. Там добавлялись только новые категории. В данном же случае будет создана отдельный тип записей (параллельно стандартным записям) со своими таксономиями (категориями), без привязки к стандартной записи.
В панели администрирования меню WordPress появится новый тип записей и будет выгледеть он следующим образом:
Создание новой таксономии
По аналогии с предыдущей статьёй создаём новую таксономию для WordPress. Однако вместо таксономии для категорий «Имен» будет создана таксономия для категорий «Новости».
// Регистрация новой таксономии:
add_action( ‘init’, ‘create_snews’, 0 );
function create_snews () <
$args = array(
// Название таксономии
‘label’ => _x( ‘Новости’, ‘taxonomy general name’ ),
// Значения таксономии в админ-панели:
‘labels’ => array(
// Общее название таксономии (множественное число).
// По умолчанию: ‘МеткИ’ или ‘РубрикИ’
‘name’ => _x( ‘Новости’, ‘taxonomy general name’ ),
// Название таксономии (единственное число).
// По умолчанию: ‘МеткА’ или ‘РубрикА’
‘singular_name’ => _x( ‘R’, ‘taxonomy singular name’ ),
// Название таксономии в пункте меню.
‘menu_name’ => __( ‘Новостные рубрики’ ),
// По умолчанию: ‘Все метки’ или ‘Все рубрики’
‘all_items’ => __( ‘Все Новости’ ),
// Текст изменения таксономии на странице редактирования.
// По умолчанию: ‘Изменить метку’ или ‘Изменить рубрику’
‘edit_item’ => __( ‘Изменить новость’ ),
// Текст в админ-панели на странице редактирования данной таксономии.
// По умолчанию: ‘Просмотреть метку’ или ‘Просмотреть рубрику’
‘view_item’ => __( ‘Просмотреть Новости’ ),
// Текст обновления таксономии во вкладке свойства.
// По умолчанию: ‘Обновить метку’ или ‘Обновить рубрику’
‘update_item’ => __( ‘Обновить новость’ ),
// Текст добавления новой таксономии при ее создании.
// По умолчанию: ‘Добавить новую метку’ или ‘Добавить новую рубрику’
‘add_new_item’ => __( ‘Добавить новость’ ),
// Название таксономии при ее создании и редактировании.
// По умолчанию: ‘Название’
‘new_item_name’ => __( ‘Название’ ),
// Текст родительской таксономии при создании и редактировании.
// Для древовидных таксономий.
// По умолчанию: Родительская.
‘parent_item’ => __( ‘Родительская’ ),
// То же, что и parent_item, но с добавлением двоеточия.
// По умолчанию: ‘Родительская:’
‘parent_item_colon’ => __( ‘Родительская:’ ),
// Текст в кнопке поиска на странице всех таксономий.
// По умолчанию: ‘Поиск меток’ или ‘Поиск рубрик’
‘search_items’ => __( ‘Поиск новости’ ),
// ЧЕТЫРЕ НИЖНИХ параметра НЕ используется для древовидных таксономий:
// Надпись популярных таксономий (на странице всех таксономий).
// По умолчанию: Популярные метки или null.
‘popular_items’ => null,
// Надпись разделения таксономий запятыми в метабоксе.
// По умолчанию: Метки разделяются запятыми или null.
‘separate_items_with_commas’ => null,
// Надпись добавления или удаления таксономий в метабоксе когда JavaScript отключен.
// По умолчанию: Добавить или null.
‘add_or_remove_items’ => null,
// Текст выбора из часто используемых таксономий в метабоксе.
// По умолчанию: Выбрать из часто используемых или null.
‘choose_from_most_used’ => null,
// Текст в случае, если запрашиваемая таксономия не найдена.
// По умолчанию: ‘Меток не найдено. или ‘Рубрик не найдено.
‘not_found’ => __( ‘Новость не найдена.’ ),
),
// Если true, то таксономия становится доступной для использования.
‘public’ => true,
// Доступность таксономии для управления в админ-панели, но не показывает ее в меню.
// По умолчанию: ‘public’.
‘show_ui’ => true,
// Показывать таксономию в админ-меню.
// Значение аргумента ‘show_ui’ должно быть true.
// По умолчанию: значение аргумента ‘show_ui’.
‘show_in_menu’ => true,
// Добавляет или исключает таксономию в навигации сайта «Внешний вид -> Меню»
// По умолчанию: ‘public’.
‘show_in_nav_menus’ => true,
// Позволяет виджет ‘Облако меток’ использовать в таксономии.
// По умолчанию: ‘show_ui’.
‘show_tagcloud’ => true,
// Показ таксономии в меню быстрого доступа.
// По умолчанию: ‘show_ui’.
‘show_in_quick_edit’ => true,
// Обеспечивает показ метабокса с таксономией в записи. По умолчанию: null.
‘meta_box_cb’ => null,
// Позволяет автоматическое создание столбцов таксономии в таблице ассоциативных типов постов.
// По умолчанию: false.
‘show_admin_column’ => false,
// Подключает описание таксономии в таблице со всеми таксономиями. По умолчанию: »
‘description’ => »,
// Делает таксономию древовидной как рубрики или недревовидной как метки. По умолчанию: false.
‘hierarchical’ => true,
// Название функции, вызываемая после обновления ассоциативных типов объектов записи (поста)
// Действует во многом как хук.
// По умолчанию: ».
‘update_count_callback’ => »,
// Значение запроса. По умолчанию: true.
‘query_var’ => true,
// Перезапись URL. По умолчанию: true.
‘rewrite’ => array(
// Текст в ЧПУ. По умолчанию: название таксономии.
‘slug’ => ‘snews’,
// Позволяет ссылку добавить к базовому URL.
‘with_front’ => false,
// Использовать (true) или не использовать (false) древовидную структуру ссылок.
// По умолчанию: false.
‘hierarchical’ => true,
// Перезаписывает конечное значение таксономии. По умолчанию: EP_NONE.
‘ep_mask’ => EP_NONE,
),
/*
// Массив полномочий зарегестрированных пользователей:
‘capabilities’ => array(
‘manage_terms’ => ‘manage_resource’,
‘edit_terms’ => ‘manage_categories’,
‘delete_terms’ => ‘manage_categories’,
‘assign_terms’ => ‘edit_posts’,
),
*/
// Должна ли таксономия запоминать порядок, в котором посты были созданы.
// По умолчанию: null.
‘sort’ => null,
// Является ли таксономия собственной или встроенной.
// Рекомендация: не использовать этот аргумент при регистрации собственной таксономии.
// По умолчанию: false.
‘_builtin’ => false,
);
// Названия типов записей к которым будет привязана таксономия
register_taxonomy( ‘snews’, array(‘news’), $args );
>
Создание шаблона для новой таксономии
Для отображения новых категорий в корневой части своего шаблона WordPress создаём файл taxonomy-snews.php. Туда вносим содержимое файла archive.php с нужными изменениями.
Прописываем к нему пути в файле archive.php:
Как интегрируется этот код в общую структуру файла archive.php есть в предыдущей статье в самом низу.
Создание произвольного типа записи
Теперь создадим произвольный тип записи, которым будет являться «Новости». Для этого в файл functions.php нужно добавить следующий код:
// Регистрация пользовательского типа записи:
add_action( ‘init’, ‘register_post_news’, 0 );
function register_post_news() <
$args = array(
// Название пользовательского типа записи во множественном числе.
// По умолчанию: значение аргумента ‘name’ массива ‘labels’.
‘label’ => _x( ‘Новости’, ‘Post Type General Name’, ‘text_domain’ ),
‘labels’ => array(
// Общее название пользовательского типа записи во множественном числе.
// Переопределяет значение ‘label’.
// По умолчанию: ‘Записи’ или ‘Страницы’
‘name’ => _x( ‘Новости’, ‘Post Type General Name’, ‘text_domain’ ),
// Название пользовательского типа записи в единственном числе.
// По умолчанию: ‘Запись’ или ‘Страница’
‘singular_name’ => _x( ‘Новость’, ‘Post Type Singular Name’, ‘text_domain’ ),
// Текст добавления нового объекта типа записи в разделе ‘Записи’/’Страницы’ в админ-панели.
// По умолчанию: ‘Добавить новую’
‘add_new’ => __( ‘Добавить новость’, ‘text_domain’ ),
// Текст добавления нового объекта типа записи на странице создания.
// По умолчанию: ‘Добавить запись’ или ‘Добавить страницу’
‘add_new_item’ => __( ‘Добавить новость’, ‘text_domain’ ),
// Текст редактирования объекта типа записи на странице редактирования.
// По умолчанию: ‘Редактировать запись’ или Редактировать страницу
‘edit_item’ => __( ‘Редактировать новость’, ‘text_domain’ ),
// Текст новой объекта типа записи.
// По умолчанию: Новая запись или Новая страница
‘new_item’ => __( ‘Новая новость’, ‘text_domain’ ),
// Текст просмотра типа записи в админ-баре.
// По умолчанию: ‘Просмотреть запись’ или ‘Просмотреть страницу’
‘view_item’ => __( ‘Просмотреть новость’, ‘text_domain’ ),
// Текст на кнопке поиска объектов данного типа записи.
// По умолчанию: ‘Поиск записей’ или ‘Поиск страниц’
‘search_items’ => __( ‘Поиск новостей’, ‘text_domain’ ),
// Текст в случае отрицательного результата поиска объектов данного типа записи.
// По умолчанию: ‘Записей не найдено’ или ‘Страниц не найдено’
‘not_found’ => __( ‘Новостей не найдено’, ‘text_domain’ ),
// Текст в случае отрицательного результата поиска объектов данного типа записи в корзине.
// По умолчанию: ‘Записей в корзине не найдено’ или ‘Страниц в корзине не найдено’
‘not_found_in_trash’ => __( ‘Новостей в корзине не найдено’, ‘text_domain’ ),
// Текст при выборе родительской страницы.
// Данный аргумент применяется только для древовидных типов записи.
// По умолчанию: __( ‘Родительская:’, ‘text_domain’ ).
‘parent_item_colon’ => null,
// Текст всех объектов типа записи в подменю.
// По умолчанию: ‘Все записи’ или ‘Все страницы
‘all_items’ => __( ‘Все новости’, ‘text_domain’ ),
// Текст архивов типа записи.
// По умолчанию: ‘Архивы записей’ или ‘Архивы страниц’
‘archives’ => __( ‘Архивы новостей’, ‘text_domain’ ),
// Текст добавления медиафайлов в объект типа записи во вкладке ‘Добавить медиазапись’.
// По умолчанию: ‘Вставить в запись’ или ‘Вставить в страницу’
‘insert_into_item’ => __( ‘Вставить в новость’, ‘text_domain’ ),
// Используется при просотре медиафайлов, прикрепленных к данному типу записи.
// По умолчанию: _x( ‘Загружен для:’, ‘text_domain’ ).
‘uploaded_to_this_item’ => _x( ‘Загружен для:’, ‘text_domain’ ),
// Текст в метабоксе миниатюры на странице редактирования типа записи.
// По умолчанию: ‘Миниатюра записи’
‘featured_image’ => __( ‘Миниатюра записи’, ‘text_domain’ ),
// Текст для загрузки миниатюры.
// По умолчанию: ‘Задать миниатюру’
‘set_featured_image’ => __( ‘Задать миниатюру’, ‘text_domain’ ),
// Текст для удаления миниатюры.
// По умолчанию: ‘Удалить миниатюру’
‘remove_featured_image’ => __( ‘Удалить миниатюру’, ‘text_domain’ ),
// По умолчанию: ‘Использовать миниатюру’
‘use_featured_image’ => __( ‘Использовать миниатюру’, ‘text_domain’ ),
// Текст в пункте меню. По умолчанию: значение аргумента ‘name’.
‘menu_name’ => __( ‘Новости’, ‘text_domain’ ),
// Текст в админ-баре во вкладке ‘Добавить’.
// По умолчанию: значение аргумента ‘singular_name’.
‘name_admin_bar’ => __( ‘Новость’, ‘text_domain’ ),
// Текст Screen reader в заголовке в разделе всех записей/страниц.
// По умолчанию: ‘Список записей’ или ‘Список страниц’
‘items_list’ => __( ‘Список новостей’, ‘text_domain’ ),
// Текст Screen reader для постраничной навигации в разделе всех записей/страниц.
// По умолчанию: ‘Постраничная навигация’
‘items_list_navigation’ => __( ‘Постраничная навигация’, ‘text_domain’ ),
// Текст Screen reader для фильтра в разделе всех записей/страниц.
// По умолчанию: ‘Фильтр’
‘filter_items_list’ => __( ‘Фильтр’, ‘text_domain’ ),
),
// Короткое описание записи/страницы. По умолчанию: ».
‘description’ => »,
// Управление видимостью в админ-панели (‘show_in_nav_menus’, ‘show_ui’)
// и во внешнем фронтэнде (‘exclude_from_search’, ‘publicly_queryable’).
// По умолчанию: false.
‘public’ => true,
// Исключить ли записи из результатов поиска фронтэнда.
// По умолчанию: значение аргумента ‘public’.
‘exclude_from_search’ => true,
// Доступность на внешнем сайте: могут ли запросы быть выполненными во фронтэнде как часть parse_request().
// По умолчанию: значение аргумента ‘public’.
‘publicly_queryable’ => true,
// Возможность управления данным пользовательским типом записи в админ-панели.
// По умолчанию: значение аргумента ‘public’.
‘show_ui’ => true,
// Доступность данного пользовательского типа записи в навигационном меню сайта.
// По умолчанию: значение аргумента ‘public’.
‘show_in_nav_menus’ => true,
// Показывать ли тип записи в админ-меню. Значение аргумента ‘show_ui’ должно быть true.
// По умолчанию: значение аргумента ‘show_ui’.
‘show_in_menu’ => true,
// Показывать ли тип записи в админ-баре. По умолчанию: значение аргумента ‘show_in_menu’.
‘show_in_admin_bar’ => true,
// Порядок расположения в админ-меню. Значение аргумента ‘show_in_menu’ должно быть true.
// По умолчанию: null — после пункта ‘Комментарии’.
‘menu_position’ => 5,
/* Возможные значения:
5 — после пункта ‘Записи’;
10 — после пункта ‘Медиафайлы’;
20 — после пункта ‘Страницы’;
25 — после пункта ‘Комментарии’;
60 — после пункта ‘Внешний вид’;
65 — после пункта ‘Плагины’;
70 — после пункта ‘Пользователи’;
75 — после пункта ‘Инструменты’;
80 — после пункта ‘Настройки’.
*/
// URL для загрузки изображения в админ-меню.
// По умолчанию: null — используется изображение пункта меню ‘Записи’.
// Ссылки на изображения доступны здесь: https://developer.wordpress.org/resource/dashicons/
‘menu_icon’ => ‘dashicons-editor-textcolor’,
/* Массив полномочий зарегестрированных пользователей для этого типа записи:
‘capability_type’ => ‘post’,
‘capabilities’ => array(
‘edit_post’ => ‘edit_news’,
‘read_post’ => ‘read_news’,
‘delete_post’ => ‘delete_news’,
‘edit_posts’ => ‘edit_news’,
‘edit_others_posts’ => ‘edit_others_news’,
‘publish_posts’ => ‘publish_news’,
‘read_private_posts’ => ‘read_private_news’,
‘create_posts’ => ‘edit_news’,
),
*/
// Использовать ли внутренние значения по умолчанию для управления правами.
// По умолчанию: null.
‘map_meta_cap’ => null,
// Является ли тип записи иерархическим (т.е. страницей).
// Позволяет установливать родительскую страницу. По умолчанию: false.
‘hierarchical’ => false,
// Управление полями для редактирования объекта типа записи.
// По умолчанию: значения ‘title’ и ‘editor’.
‘supports’ => array(
‘title’, // Заголовок объекта типа записи.
‘editor’, // Редактор контента.
‘author’, // Автор.
‘thumbnail’, // Миниатюра.
‘excerpt’, // Цитата, отрывок.
‘trackbacks’, // Отправить обратные ссылки.
‘custom-fields’, // Произвольные поля.
‘comments’, // Комментарии.
‘revisions’, // Сохраняет версии.
‘page-attributes’, // Атрибуты.
‘post-formats’, // Формат записи.
),
// Обеспечивает обратный вызов функции, которая требуется при настройке метабоксов в разделе редактирования.
// По умолчанию: null.
‘register_meta_box_cb’ => null,
// Массив связанных таксономий для данного типа записи.
// Пользовательскую таксономию необходимо зарегестрировать через функцию register_taxonomy().
// По умолчанию: без таксономий.
‘taxonomies’ => array(‘snews’),
// Включает архивы данного типа записи.
// Будет использоваться значение $post_type как ярлык архива по умолчанию. По умолчанию: false
‘has_archive’ => false,
// Возможность перезаписи для данного типа записи.
// Для предотвращения перезаписи, используют значение false.
// По умолчанию: true и значение $post_type используется как ярлык.
‘rewrite’ => array(
// Текст в ссылке. По умолчанию: значение $post_type.
‘slug’ => ‘news’,
// Должна ли структура ссылки быть с базовым URL.
// Пример: если структура ссылки /blog/,
// то ссылка при соответствующих параметрах ‘with_front’
// выглядит так: false->/news/, true->/blog/news/
// По умолчанию: true.
‘with_front’ => false,
// Должна ли структура постоянных ссылок быть встроена для этого типа записи.
// По умолчанию: значение ‘has_archive’.
‘feeds’ => false,
// Должна ли структура ссылок обеспечена быть постраничной навигацией.
// По умолчанию: true.
‘pages’ => true,
),
// Перезаписывает конечное значение. По умолчанию: EP_PERMALINK.
‘permalink_epmask’ => EP_PERMALINK,
// Задается значение запроса для данного типа записи.
// По умолчанию: true — задается значение $post_type.
‘query_var’ => true,
// Возможность данного типа записи быть экспортированным. По умолчанию: true.
‘can_export’ => true,
// Удалять ли записи данного типа при удалении их автора. По умолчанию: null.
‘delete_with_user’ => null,
// Представлять ли этот тип записи в REST API. По умолчанию: false.
‘show_in_rest’ => false,
// Базовый ярлык данного типа записи когда доступно использование REST API.
// По умолчанию: значение $post_type.
‘rest_base’ => $post_type,
// Является ли этот тип записи собственным или встроенным.
// Рекомендация: не использовать этот аргумент при регистрации собственного типа сообщения. По умолчанию: false.
‘_builtin’ => false,
);
register_post_type( ‘news’, $args );
>
Создание шаблона для нового типа записей
Создаём в директории шаблона своего сайта на WordPress файл single-news.php. И вставляем туда содержимое файла single.php с теми изменениями, которые вам нужны в дизайне новостей.
Дружелюбные URL в своей таксономии
Если на сайте включены человекопонятные URL (ЧПУ), то для работы новых таксономий WordPress обязательно нужно добавить в файл functions.php следующий php:
// НЕОБХОДИМА для ссылок ЧПУ, иначе страница с категорией будет не найдена
// Удаление slug таксономии:
function taxonomy_link( $link, $term, $taxonomy ) <
if ( $taxonomy !== ‘snews’ )
return $link;
return str_replace( ‘snews/snews/’, », $link );
>
add_filter( ‘term_link’, ‘taxonomy_link’, 10, 3 );
// Редирект:
function taxonomy_rewrite_rule() <
add_rewrite_rule(‘allnews/?$’, ‘index.php?snews=allnews’, ‘top’);
>
add_action(‘init’, ‘taxonomy_rewrite_rule’);
После всех манипуляций с произвольным типом записей в файле functions.php, если у вас ЧПУ ссылки, надо обновить их структуру. Для этого заходим в административной части WordPress по ссылке: «Настройки» > «Постоянные ссылки». И там ничего не меняя, нажимаем кнопку «сохранить изменения».
Если этого не сделать, то новые страницы на сайте с записями новых статей и таксономий этих статей (категорий) не будут найдены.
Вышеприведенный код работает при следующей настройке в постоянных ссылках WordPress:
Новые записи выглядят следующим образом:
А новые категории показываются так:
Необходимые дополнения для произвольных типов записей
Если вам нужно вывести какие-нибудь данные (на подобии is_single), в зависимости от типа произвольных данных, то нужно использовать is_singular:
где news и article — типы произвольных полей.
Также читайте
Привет. Ты находишься на моём сайте. Я разработчик. Здесь я делюсь своими наработками и знаниями. Спрашивай в комментариях, если тебе что-то не понятно или пиши, если есть что добавить.
Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:
Произвольные таксономии в WordPress
WordPress поддерживает произвольные таксономии, которые можно использовать для группировки и классификации записей. Ранее мы писали о том, как добавить произвольный тип записей в WordPress, а в этой публикации вы узнаете, как добавить произвольную таксономию в WordPress и прикрепить ее к произвольному типу записей.
Регистрируем произвольную таксономию
Есть очень простой способ добавить произвольные таксономии в WordPress — воспользоваться плагином Types, который позволяет работать не только с произвольными таксономиями, но и с произвольными типами записей и с произвольными полями.
Если по каким-то причинам вы не желаете использовать плагин, то зарегистрировать произвольную таксономию в WordPress можно с помощью следующего кода. Этот код необходимо добавить в файл темы functions.php и отредактировать так, как вам необходимо.
Этот код имеет некоторые параметры, которые вам нужно поменять в соответствии с вашими требованиями. Параметры:
- «apartments_category» — название новой таксономии. Каждая таксономия должна иметь уникальное название. Поменяйте этот параметр, так как вам необходимо.
- «apartments» — название типа записей, к которому крепится новая таксономия. Поменяйте этот параметр, чтобы прикрепить таксономию к вашему типу записей.
- $labels — массив описаний для таксономии. Поменяйте описания так, как вам необходимо.