Создаём свою произвольную таксономию на WordPress к типу записи — post.
Имеем следующую задачу. Нужна новая таксономия в разделе «Записи». Она будет называться «Имена». Например, чтобы создать категории для имён актёров в кино.
Если нужно полностью создать новый тип записей со своими таксономиями (категориями), а не просто добавить в стандартную запись новые таксономии, то для этого есть другая статья: Создание произвольных типов записей и таксономий в WordPress.
Когда таксономия «Имена» будет введена, при создании новой записи появится новый блок категорий имен актёров.
Для реализации этой задачи, в файл functions.php своей темы нужно добавить следующий блок php кода:
add_action( 'init', 'create_taxname', 0 );
function create_taxname () {
$args = array(
// Название таксономии
'label' => _x( 'Имена', 'taxonomy general name' ),
// Значения таксономии в админ-панели:
'labels' => array(
// Общее название таксономии (множественное число).
// По умолчанию: 'МеткИ' или 'РубрикИ'
'name' => _x( 'Имена', 'taxonomy general name' ),
// Название таксономии (единственное число).
// По умолчанию: 'МеткА' или 'РубрикА'
'singular_name' => _x( 'Имена', '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' => 'person',
// Позволяет ссылку добавить к базовому 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( 'person', array('post'), $args );
}
Теперь в разделе записи появится новая категория записей с названием Имена. Здесь можно будет добавить новых актёров.
Читабельные ссылки (ЧПУ) в своей произвольной таксономии
Если во вкладке «Настройки постоянных ссылок» (меню навигации в админ панели WordPress: «Настройки» > «Постоянные ссылки») выставлены настройки для показа пользователям «дружественных URL» (т.е. ЧПУ ссылок / человекопонятный урл / friendly url), то для работы новой таксономии обязательно требуется добавить следующий php код:
// Удаление slug таксономии:
function taxonomy_link( $link, $term, $taxonomy ) {
if ( $taxonomy !== 'person' )
return $link;
return str_replace( 'person/person/', '', $link );
}
add_filter( 'term_link', 'taxonomy_link', 10, 3 );
Кроме того, после внесения изменений в новую таксономию в файле functions.php, обязательно нужно «сохранить изменения» на странице админ панели WordPress: «Настройки» > «Постоянные ссылки». Иначе страница категорий с новой таксономии будет не найдена.
В данном случае таксономия работает при следующей настройке в постоянных ссылках:
Создание шаблона для таксономии
Для показа новых рубрик таксономии нужно создать следующий файл – taxonomy-person.php. В файле archive.php указываем путь к шаблону для новой рубрики таксономии. В моём случае, шаблон для таксономии, лежит в корневой директории шаблона WordPress:
elseif (is_tax(person) ) {
get_template_part( '/taxonomy-person' );
}
Данный код имеет силу в общем шаблоне вида:
// Если это конкретные категории
if (is_category(array('102','103','104')) ) {
get_template_part( '/archives/raitings' );
}
// категория таксономии
elseif (is_tax(person) ) {
get_template_part( '/taxonomy-person' );
}
// категория поиск
elseif (is_search() ) {
get_template_part( '/search' );
}
// категория теги и всё другое
else {
get_template_part( '/archives/tag' );
}
?>
В файл taxonomy-person.php вносим содержимое файла archive.php с нужными изменениями, которые будут присущи новым категориям. Если ничего не меняется, то шаблон можно оставить таким же.
Привет, хотел пообщаться по кастомных таксономий и Seo, так как встретился с этой проблема является
Нужно правильное вывода при настройке
site.com/%category%/%postname%
А также как правильно забрать слаг таксономии
Слишком обобщенно задан первый вопрос, чтобы ответить что-то конкретное.
А слаг у таксономии можно получить как-то так:
$term = get_term($termId);
$slug = $term->slug;
echo $slug;