Произвольный тип постов и таксономии на WordPress

Задача:

Как создать новый тип записи и категорию (таксономия) в CMS WordPress

  1. Создать произвольный тип поста, например «Сотрудники»
  2. Создать разделы (таксономии) «Отделы», чтобы разместить анкеты сотрудников по отделам.
  3. В админке должен быть отдельный пункт меню «Сотрудники» и подпункты: «Список сотрудников», «Добавить сотрудника», «Отделы»
  4. Вывести в публичной части сайта, по ссылке в меню /peoples/ список сотрудников, по клику переход на детальную страницу - анкета сотрудника.


Решение:
1 В папке шаблона создадим папку /post_type/
2 В папке /post_type/ создадим файл post_type_peoples.php
3 В файле function.php
<?
//Подключаем файл, в котором создаём тип поста «Сотрудники»
require get_template_directory() . '/post_type/post_type_peoples.php';
?>
4 В файле post_type_peoples.php
<?
// Тип постов — Сотрудники
function my_peoples() {
	$labels = array(
		'name' => __( 'Сотрудники' ),
		'singular_name' => __( 'Сотрудники' ),
		'add_new' => 'Добавить сотрудника',
		'add_new_item' => 'Добавить сотрудника',
		'edit_item' => 'Редактировать сотрудника',
		'new_item' => 'Новые',
		'all_items' => 'Список сотрудников',
		'view_item' => 'Просмотр на сайте',
		'search_items' => 'Искать',
		'not_found' =>  'Не найдены.',
		'not_found_in_trash' => 'В корзине пусто.',
	);
	$supports = array( 'title', 'editor','thumbnail' );
	$details = array(
		'labels' => $labels,
		'description' => 'Описание',
		'public' => true,
		'menu_position' => 5,
		'supports' => $supports,
		'has_archive' => true,
		'menu_icon'  => 'dashicons-format-aside',
		'rewrite' => 'peoples',
	);
	register_post_type('peoples', $details);
}
add_action('init', 'my_peoples');


// Таксономии — Отделы сотрудников
function taxonomies_peoples() {
	$labels = array(
		'name' => _x( 'Отделы', 'taxonomy general name' ),
		'singular_name' => _x( 'Отдел', 'taxonomy singular name' ),
		'search_items' =>  __( 'Поиск отдела' ),
		'all_items' => __( 'Все отделы' ),
		'parent_item' => __( 'Parent Genre' ),
		'parent_item_colon' => __( 'Parent Genre:' ),
		'edit_item' => __( 'Редактировать отдел' ),
		'update_item' => __( 'Обновить отдел' ),
		'add_new_item' => __( 'Добавить новый отдел' ),
		'new_item_name' => __( 'Имя нового отдела' ),
		'menu_name' => __( 'Отделы' ),
	);
	$args = array(
		'labels' => $labels,
		'hierarchical' => true,
	);
	register_taxonomy('peoples_cat', 'peoples', $args);
}
add_action('init', 'taxonomies_peoples');
?>
5 Чтобы вывести в публичной части список отделов сотрудников (таксономии), создадим файл taxonomy-peoples_cat.php с содержимым:
<?php get_header();?>

	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

			<div>
				<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
			</div>

		<?php endwhile; else: ?>
	<?php endif; ?>

	<div>
		<?php echo paginate_links(array('prev_next' => false)); ?>
	</div>

<?php get_footer();?>
6 Чтобы вывести в публичной части список сотрудников (записи), создадим файл archive-peoples.php с содержимым:
<?php get_header(); ?>

	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

			<div>
				<a href="<?php the_permalink();?>"><?php the_title();?></a>
			</div>

		<?php endwhile; else: ?>
	<?php endif; ?>

<?php get_footer(); ?>
7 Для детальной страницы создадим файл single-peoples.php
<?php get_header(); ?>

	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

			<h1><?php the_title(); ?></h1>

			<div><?php the_content(); ?></div>

		<?php endwhile; else: ?>
	<?php endif; ?>

<?php get_footer(); ?>
Изменено: 13 11 2016
Просмотров: 4775