Метаполя (произвольные поля) для рубрик (таксономий) в WordPress — title, description, keywords…
На сайте есть замечательная статья про создание произвольных полей но вот про метаполя или произвольные поля вроде title для элементов таксономий или терминов или рубрик, меток ничего не нашел.
Подскажите, в какую сторону копать (без плагинов).
Хотелось бы иметь простой класс, чтобы создать метабоксы (metaboxes) для taxonomy (term терминов). Т.е. Как создать метабоксы для таксономий?
Как раз по теме создания таких полей в админ-панели, я описывал хук (taxonomy)_edit_form_fields. Рекомендую к прочтению.
Шаг 1: (с версии WP 4.4 не нужен)
Шаг 1 устарел с версии WordPress 4.4. поэтому я убрал его вниз ответа...
Шаг 2:
Нужно вывести поля при редактировании термина. Для этого предлагаю использовать класс от Миши Рудрастых (я его немного изменил). Добавляем его в functions.php в самое начало или в плагин:
Далее используя добавленный класс, создаем поля для элементов таксономий
И вот что должно получиться:
Шаг 3:
Выводим имеющиеся поля в заголовки рубрик и в head часть документа.
Можно делать без хуков, а напрямую, тут уже от имеющихся плагинов зависит...
Главное тут мы получаем метаполя с помощью get_metadata()
Шаг 1: (с версии WP 4.4 не нужен)
Тут главная проблема, что некуда записывать данные. Во многих источниках данные пишут в опции, а это плохо. Хорошо если создать специальную таблицу метаданных для таксономий.
Этот шаг не нужен с версии 4.4. В этой версии, наконец, была создана таблица метаполей для элементов таксономий! Поэтому если у вас WP 4.4 и выше, переходите сразу к шагу 2.
Запускаете один раз эту функцию, потом код можно удалить. Для запуска можно в functions.php сунуть:
Эта функцию создаст новую таблицу в БД, termmeta - термины для таксономий.
Подробнее в этой статье: http://wp-kama.ru/note/taxonomy-metadata-metadannyie-dlya-taksonomiy
Теперь у нас есть куда записывать данные таксономий.
в теории все понятно, как раз то, что было нужно.
Но вот на практике - не работает. Данные не сохраняются.
В этой статье: также было упомянуто про создание поля для картинки в рубриках, было бы здорово реализовать еще и это. Сейчас потыкаю на тестовом варианте, может что и получится.
сейчас вывод title для записей и страниц происходит вот так:
также, в header.php вывод мета для страниц и записей
Как возможно подставить вывод сюда, с прописанием условий для категорий? а то запутался
Как это не сохраняются, я проверял код у меня все работало...
Что касается вывода, то созданные метаполя выводятся так:
Это вывод для поля
seo_description
И т.д. по аналогии. Выводите где нужно и как нужно. Перед выводом проверьте что вы находитесь на странице рубрики. В общем этот код есть в ответе, изучайте...
Таблица wp_termmeta создалась, тут все ок, поля в таблице: meta_id, term_id, meta_key, meta_value. Доп. поля в рубрике тоже создались, все как на картинке, выложенной Вами. Но вот при редактировании рубрики, таблица остается пустой т.е.: вбиваем в соответствующие поля в рубрике что-либо, кликаем "сохранить", заходим в рубрику заново, и видим эти поля пустыми. В бд данные также не заносятся
Ой, извиняюсь! Я же забыл зарегистрировать название таблицы. Обновил класс trueTaxonomyMetaBox до версии v1.1, там строки добавил:
здорово, работает. Только Вы ошиблись: поле в таблице по выше написанному коду не "term_seo_description", а "txseo_seo_description". Получилось что-то вроде вот этого:
Осталось дописать вывод в else стандартного сценария вывода доп полей. Спасибо большое!
ага, все вместе получилось так:
Для тех кто использует All in One Seo Pack третий шаг нужно изменить
Спасибо! Помогли
Превосходно! Спасибо за отличный, структурированный, достаточно объяснённый пример! Очень помогло с переданным сайтом, на котором стоит старый ACF, не умеющий в поля для рубрик (а обновление ломает вёрстку, построенную на других полях).
Еще бы указать, можно ли поднять их повыше в админке, т.к. они болтаются в самом низу.
Огромное спасибо, полезный материал, но подскажите, как добавить возможность к выше упомянутому, а именно возможность добавить абрац, так как описание дублируется в дескрипшн.
тут нашел решение, но не тестировал, что скажите?
А если мне нужен select тогда как быть?