@Gumeniuc

Как правильно создать категории на Wordpress?

Доброго времени суток! Не могу сообразить как мне правильно создать категории. В исходных данных у меня: Деятельность - Город - Человек. Мне нужно чтобы подкатегория "Человек" принадлежала сразу и к "Деятельности", и к "Городу". Чтобы материал, который будет добавляться в подкатегорию "Человек" показывался сразу в двух категориях. Как это реализовать?
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Я бы зарегистрировал кастомный post type human и две таксономии к нему city и activity

Как-то так:

if ( ! function_exists( 'init_register_post_types_callback' ) ) {

	/**
	 * Function for 'init` action-hook.
	 * 
	 * @return void
	 */
	function init_register_post_types_callback() {

		register_taxonomy( 'city', array( 'human' ), array(
			'labels'            => array(
				'name'                       => _x( 'Cities', 'taxonomy general name', 'domainname' ),
				'singular_name'              => _x( 'City', 'taxonomy singular name', 'domainname' ),
				'search_items'               => __( 'Search city', 'domainname' ),
				'popular_items'              => __( 'Popular cities', 'domainname' ),
				'all_items'                  => __( 'All cities', 'domainname' ),
				'parent_item'                => null,
				'parent_item_colon'          => null,
				'edit_item'                  => __( 'Edit city', 'domainname' ),
				'update_item'                => __( 'Update city', 'domainname' ),
				'add_new_item'               => __( 'Add new city', 'domainname' ),
				'new_item_name'              => __( 'New city', 'domainname' ),
				'separate_items_with_commas' => __( 'Separate city with commas', 'domainname' ),
				'add_or_remove_items'        => __( 'Add or remove city', 'domainname' ),
				'choose_from_most_used'      => __( 'Choose from the most used cities', 'domainname' ),
				'menu_name'                  => __( 'Cities', 'domainname' ),
			),
			'public'             => true,
			'show_in_nav_menus'  => false,
			'show_in_rest'       => true,
			'show_in_quick_edit' => true,
			'sort'               => true,
			'show_tagcloud'      => false,
			'hierarchical'       => true,
			'rewrite'            => array( 'slug' => 'city', 'hierarchical' => false, 'with_front' => false, 'feed' => false ),
			'show_admin_column'  => true,
		) );

		register_taxonomy( 'activity', array( 'human' ), array(
			'labels'             => array(
				'name'              => _x( 'Activities', 'taxonomy general name', 'domainname' ),
				'singular_name'     => _x( 'Activity', 'taxonomy singular name', 'domainname' ),
				'search_items'      => __( 'Search activities', 'domainname' ),
				'all_items'         => __( 'All activities', 'domainname' ),
				'parent_item'       => __( 'Parent activities', 'domainname' ),
				'parent_item_colon' => __( 'Parent activities:', 'domainname' ),
				'edit_item'         => __( 'Edit activities', 'domainname' ),
				'update_item'       => __( 'Update activities', 'domainname' ),
				'add_new_item'      => __( 'Add new activities', 'domainname' ),
				'new_item_name'     => __( 'New activities Name', 'domainname' ),
				'menu_name'         => __( 'Activities', 'domainname' ),
			),
			'public'             => true,
			'show_in_nav_menus'  => false,
			'show_in_rest'       => true,
			'show_in_quick_edit' => true,
			'sort'               => true,
			'show_tagcloud'      => false,
			'hierarchical'       => true,
			'rewrite'            => array( 'slug' => 'activity', 'hierarchical' => false, 'with_front' => false, 'feed' => false ),
			'show_admin_column'  => true,
		) );

		register_post_type( 'human', array(
			'labels'          => array(
				'name'               => __( 'Humans', 'domainname' ),
				'singular_name'      => __( 'Human', 'domainname' ),
				'add_new'            => __( 'Add human', 'domainname' ),
				'add_new_item'       => __( 'Add new human', 'domainname' ),
				'edit_item'          => __( 'Edit human', 'domainname' ),
				'new_item'           => __( 'New human', 'domainname' ),
				'view_item'          => __( 'View human', 'domainname' ),
				'search_items'       => __( 'Search human', 'domainname' ),
				'not_found'          => __( 'Human not found', 'domainname' ),
				'not_found_in_trash' => __( 'Human not found in trash', 'domainname' ),
				'menu_name'          => __( 'Human', 'domainname' ),
			),
			'public'          => true,
			'show_in_rest'    => true,
			'capability_type' => 'post',
			'hierarchical'    => false,
			'has_archive'     => 'humans',
			'rewrite'         => array( 'slug' => 'humans', 'with_front' => false, 'pages' => true, 'feeds' => false, 'feed' => false ),
			'query_var'       => true,
			'supports'        => array( 'page-attributes', 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ),
			'taxonomies'      => array( 'activities' ),
		) );
	}
}
add_action( 'init', 'init_register_post_types_callback' );
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
pro100taa
@pro100taa
Варианты разные есть. Можете меткой поставить. Не понимаю в чём сложность? Где и в каком виде нужно вывести подкатегорию "Человек"?
Ответ написан
Zettabyte
@Zettabyte
Проф. восстановление данных ▪ Вопрос? См. профиль
Мне нужно чтобы подкатегория "Человек" принадлежала сразу и к "Деятельности", и к "Городу". Чтобы материал, который будет добавляться в подкатегорию "Человек" показывался сразу в двух категориях.

Как минимум, некоторое время назад стандартными средствами такое сделать было нельзя.

Категории в вордпрессе иерархические, но подкатегории могут иметь только одного "родителя" (parent). Т.е. добавить подкатегорию сразу к двум родителям не получится.

Вам нужно либо добавлять стороннюю функциональность, либо вручную проставлять нужные категории / тэги.

Чтобы материал, который будет добавляться в подкатегорию "Человек" показывался сразу в двух категориях

И вот это, насколько я помню, тоже по умолчанию не работает.

У вас может быть блог о путешествиях по России. Там категории крупных регионов: Дальний Восток, в ней подкатегория Камчатка.
Вы можете проставить посту только подкатегорию Камчатка, и пост будет отображаться только в ней, но не будет отображаться в родительском Дальнем Востоке.
Ответ написан
@Refguser
Делаю ИМ и другие решения
Мне нужно чтобы подкатегория "Человек" принадлежала сразу и к "Деятельности", и к "Городу". Чтобы материал, который будет добавляться в подкатегорию "Человек" показывался сразу в двух категориях. Как это реализовать?

Можно использовать и родные рубрики и метки.
Но лучше создать свой тип контента со своими таксономиями и, возможно, кастомными полями.
Главный вопрос тут не как технически сделать, а как правильно спроектировать структуру. Что к чему присвоить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы