Что такое таксономия? Рубрики, метки — это и есть таксономии.
То есть получается, что заюзав упомянутую функцию, можно создать абсолютно независимые категории (или метки), с отдельным интерфейсом.
Короче говоря, когда во время разработки сайта начинает не хватать стандартных рубрик и меток — создаём таксономии.
register_taxonomy($taxonomy, $object_type, $args);
$taxonomy
(строка) Название таксономии. Не должно содержать пробелов и заглавных букв.
$object_type
(массив/строка) Тип объекта (или объектов), для которых создаётся таксономия. По умолчанию в WordPress существуют следующие типы:
Также допускается возможность создания своего собственного объекта
$args
(массив) Список параметров.
Не хочу простым текстом перечислять все параметры, лучше перейдём к примеру и там сразу же и разберёмся.
function add_new_taxonomies() { /* создаем функцию с произвольным именем и вставляем в неё register_taxonomy() */ register_taxonomy('platform', array('post'), array( 'hierarchical' => false, /* true - по типу рубрик, false - по типу меток, по умолчанию - false */ 'labels' => array( /* ярлыки, нужные при создании UI, можете не писать ничего, тогда будут использованы ярлыки по умолчанию */ 'name' => 'Игровые платформы', 'singular_name' => 'Платформа', 'search_items' => 'Найти платформу', 'popular_items' => 'Популярные платформы', 'all_items' => 'Все платформы', 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => 'Редактировать платформу', 'update_item' => 'Обновить платформу', 'add_new_item' => 'Добавить новую платформу', 'new_item_name' => 'Название новой платформы', 'separate_items_with_commas' => 'Разделяйте платформы запятыми', 'add_or_remove_items' => 'Добавить или удалить платформу', 'choose_from_most_used' => 'Выбрать из наиболее часто используемых платформ', 'menu_name' => 'Платформы' ), 'public' => true, /* каждый может использовать таксономию, либо только администраторы, по умолчанию - true */ 'show_in_nav_menus' => true, /* добавить на страницу создания меню */ 'show_ui' => true, /* добавить интерфейс создания и редактирования */ 'show_tagcloud' => true, /* нужно ли разрешить облако тегов для этой таксономии */ 'update_count_callback' => '_update_post_term_count', /* callback-функция для обновления счетчика $object_type */ 'query_var' => true, /* разрешено ли использование query_var, также можно указать строку, которая будет использоваться в качестве него, по умолчанию - имя таксономии */ 'rewrite' => array( /* настройки URL пермалинков */ 'slug' => 'platform', // ярлык 'hierarchical' => false // разрешить вложенность ), ) ); } add_action( 'init', 'add_new_taxonomies', 0 );
Короче этот код нужно вставить в functions.php, а дальше получится вот что:
1. Пункт в меню для созданной таксономии:
2. При переходе по нему попадаем на страницу, схожую со страницей создание меток/рубрик. Я немного уменьшил окошко, потому что не хотел масштабировать картинку и терять качество.
3. На странице создания записи появляется блок с выбором элементов новой таксономии, в примере — игровых платформ.
Кстати, одно важно замечание, в случае, если вы использовали параметр «rewrite» для пермалинков, вам нужно перейти на страницу редактирования постоянных ссылок в настройках и просто нажать кнопку «Сохранить изменения», либо заюзать один раз flush_rules()
кстати на странице с таксономиями в админке появляется что-то типо облака популярных таксономий. Как его отключить?
Нужно найти в коде что-то типа:
и заменить на:
Привет Миша!), помоги с вопросом..
Возникла такая проблема: есть около 80 таксономий, после того как я все их добавил, сервер выдает такие цифры:
до: 44 queries 0.352 seconds
после: 206 queries 0.703 seconds
Выяснил, что у меня каждая новая таксономия добавляет по 2 запроса. Что делать или так и должно быть?
80 terms or 80 taxonomies?
не знаю как это правильно спросить на русском надеюсь ты поймешь)
Добрый день, Михаил.
Custom taxonomy - отличная вещь, но - все хорошо, за исключением: не могу нигде найти описание функции вывода связанных одной таксономией (точнее - term) на странице taxonomy.php.
Точнее, выглядит так:
1. Есть таксономия - actor
По клику на фамилии актера открываем taxonomy-actor.php и любуемся его фотографией и описанием через term_description.
Но очень хочется привязать список фильмов этого актера.
Пересмотрел Доки wordpress.org - не могу найти похожего примера
Тоже и через Google.
Если есть пара минут подсказать с примером - буду благодарен.
В качестве основы теории делал все как написано здесь -
http://justintadlock.com/archives/2009/06/04/using-custom-taxonomies-to-create-a-movie-database
Но вот с созданием страницы шаблона - не очень разобрался.
Точнее, страница работает корректно, но как вывести в ней список фильмов актера? Файл taxonomy-actor.php - для всех актеров.
Доброго времени суток,
во-первых хочу извиниться за долгий ответ, несколько дней не имел доступа в инет.
итак,
есть таксономия актёров - actor, у таксономий актёров полюбому должен быть привязанный тип поста, в данном случае я так понимаю это должен быть - фильм.
То есть создаем тип поста фильм и привязываем к созданной таксономии актёров.
В итоге - заходим в админку, создаем новый фильм, а сбоку выбираем нужных актёров для этого фильма.
Затем в плане файлов -
taxonomy-actor.php
- достаточно добавить обычный цикл без параметров в этот файл и всё будет выводиться как надо.Есть остались неясные моменты - пожалуйста, спрашивайте, буду рад помочь.
Михаил, иногда долгое молчание помогает разобраться самостоятельно)))
Просто сразу не сообразил, что для вывода всех записей конкретного актера можно использовать стандартный цикл.
Все равно, спасибо за ваш ответ.
Михаил, забыл спросить, возможно, поможете.
У меня есть в одном файле цикл - выводит записи.
Мне нужно в него добавить фильтр для вывода самых популярных записей.
Популярные записи определяются плагином WP-PostViews.
Есть такой файл - http://pastebin.com/Z6AsYpZ4
Мне надо добавить фильтр, и как я понимаю, в строке 8.
Что-то типа:
$post_query = 'cat='.$carousel_cat_id.'&posts_per_page=10&meta_key=views&meta_value=???';
Я нигде не могу найти, как правильно написать значение meta_value для отображения списка записей, у которых - больше 10 просмотров?
У плагина WP-PostViews (автор - http://lesterchan.net/site/donation/ ) есть два поля:
meta_key - views
meta_value - число
Можете подсказать?
Буду очень благодарен)
да, вместо
meta_value
написатьmeta_value_num
, должно помочь) подробности здесь: https://misha.agency/blog/wordpress/wp_query.htmlПривет! У меня вопрос такой...
Вот я создал свою таксономию "Блаблабла" с иерархичностью как категорий...
В ней я создал например элемент "Тутуту" с ярлыком "tututu"...
Создаю запись, выбираю там у записи этот самый элемент "Тутуту" в качестве "какбы" категории (таксономии)...
Теперь я хочу вывести в шаблоне ярлык этого элемента для записи))
То есть чтобы например у записи можно было вывести например под заголовком "tututu"...
Нифига не могу разобраться как вывести slug моего элемента
Привет!
Если я всё правильно понял, то:
Подробнее про эту функцию тут.
Можно ли создать таксономию без slug? Чтобы запись имела адрес сайт/запись?
И если уже существует таксономия с slug, как ее убрать? Сначала убрать ее в коде, а потом заменить адреса в базе данных?
точно не помню, попробуте поэкспериментировать с параметрами rewrite (а в нем slug, hierarchical, with_front).
В базе ничего менять не надо будет - достаточно перейти в настройки постоянных ссылок в админке и нажать кнопку сохранения.
Спасибо! По сути ведь изначальная таксономия wp не имеет slug приставки, видимо можно создавать таксономии без дополнительных слов в адресе.
Михаил, здравствуйте!
Подскажите пожалуйста, как сделать так, чтобы у всех новых юзеров, в редакторе, созданная таксономия по умолчанию была скрыта? Сразу не отображалась, а только кому надо тот и включает её отображение поставив флажок в настройках?
Очень буду благодарен!
Здравствуйте!
Увы, не знаю решения 🙂
Михаил, здравствуйте. Сильно ли нагружает использование Пользовательской таксономии? Слышал, что нагрузку создает приличную, что скажите по этому поводу?
Здравствуйте!
Если вы не будете создавать сотни таксономий (имеется ввиду не элементов таксономий), то всё будет ок.
Добрый день!
Создал пользовательскую таксономию, но никак не могу вывести свой title для категорий этой таксономии. У меня стоит связка All in One Seo Pack + Category Seo Meta Tags (для тэгов), в обычных рубриках title прописывается нормально, а для пользовательской таксономии не хочет, хотя поля в админке для них есть и они заполнены.
Может вы в курсе, как это исправить?
Добрый день!
Думаю тут нужно проверить файлы, которые отвечают за вывод страниц этой таксономии + header.php.
Можно сделать, чтобы страница таксономии была 2-го уровня вложености? (сейчас 3-го site/tax_name/tax_value)
Об этом в новом посту, который выйдет в свет послезавтра.
В labels не хватает 'not_found' ( Default is __( 'No tags found.' ) or __( 'No categories found.' ) )
Здравствуйте, Михаил. У меня задачка. Нужно вывести к каждому анонсу цену за квартиру и площадь. И что-бы админ уже устанавливал сам из админки при публикации. Вот не нашел ничего кроме как применить таксономии 🙂 Но как можно просто вывести в публикации эти два поля? Не создавая таксономий?
Здравствуйте!
При помощи метабоксов, если я правильно понял задачу)
Точно, а я туплю.
Здравствуйте, Михаил. Помогите решить такую проблему. Есть таксономия объект недвижимости(slug -> properties). Эти объекты разделены на разделы: квартиры, дома и тд. Есть ещё два раздела продажа и аренда. При показе объявлений wordpress пишет ссылку до объявления properties/ имя объявления. Подскажите как мне сделать через wordpress или htaccess ссылки вида prodazha/kvartiri/ имя объявления. Заранее спасибо
Здравствуйте!
А вы пробовали указать в параметре rewrite slug?
спасибо за статью. очень помогла... Особенно совет "Кстати, одно важно замечание, в случае, если вы использовали параметр «rewrite» для пермалинков, вам нужно перейти на страницу редактирования постоянных ссылок в настройках и просто нажать кнопку «Сохранить изменения», либо заюзать один раз flush_rules()". вроди все сделал правильно, а список по таксамонии неотображалось, но нажав кнопку «Сохранить изменения» и все стало на круги своя.
cоздал таксономию country
cоздал в папке файл taxonomy-country.php
а страница детальная термина белая (
что делать?
Просто белая или 404?
Настройки постоянных ссылок обновили?
В файле
taxonomy-country.php
попробуйте вставить какой-нибудь очень простой код, напримерecho 'привет';
и посмотрите, не заработает ли.настройки нет
а что там надо менять?
не заработало
Просто зайдите туда и сохраните без изменений.
Отлично, страница создалась
Скопировал шаблон страницы - echo выводил текст
а если код php другого шаблона то пусто
Значит код не подходит для этого файла 🙂
Михаил, привет! С праздниками!
Вопрос такой: как можно сделать терм по умолчанию для произвольной таксономии или присваивать любой терм при создании произвольного поста?
Добрый день! С Праздниками!
Хороший вопрос! Первое, что приходит в голову - через JavaScript в админке, либо через хук
save_post
- проверять, если никакой термин посту не присвоен, то присваивать тот, что должен быть по умолчанию (второй вариант наверное более правильный с точки зрения WordPress).Вот про сей хук я запамятовал)) Спасибо!
Подскажите у меня на странице создания записи не появляется блок с выбором элементов новой таксономии в чём может быть проблема не могу понять.
Ого, какая-то жесть, никто из моих знакомых с таким не сталкивался!
Я использовал ваш пример на базовой теме WP и на стартовой underscores
1. Пункт в меню создаётся
2. Страница схожая со страницей создание меток/рубрик создаётся
3. На странице создания записи не появляется блок :(((
Устанавливал wordpress-5.3.2-ru_RU на Open Server
При register_post_type() создании нового типа записи все 3 пункта выводятся но этот вариант мне не подходит
Игровые платформы - PlayStation как эту taxonomy прописать в посте