Создание собственного типа записи (Custom Post Type) в WordPress позволяет вам организовать контент на сайте в удобном формате. Это полезно, когда стандартные типы записей, такие как «Посты» и «Страницы», не подходят для ваших нужд. В этой статье мы рассмотрим, как создать собственный тип записи с пошаговой инструкцией и примерами кода.
Шаг 1: Регистрация собственного типа записи
Для создания собственного типа записи в WordPress, необходимо использовать функцию register_post_type(). Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин.
<?php
function create_custom_post_type() {
$labels = array(
'name' => _x('Books', 'Post Type General Name', 'text_domain'),
'singular_name' => _x('Book', 'Post Type Singular Name', 'text_domain'),
'menu_name' => __('Books', 'text_domain'),
'name_admin_bar' => __('Book', 'text_domain'),
'archives' => __('Book Archives', 'text_domain'),
'attributes' => __('Book Attributes', 'text_domain'),
'parent_item_colon' => __('Parent Book:', 'text_domain'),
'all_items' => __('All Books', 'text_domain'),
'add_new_item' => __('Add New Book', 'text_domain'),
'add_new' => __('Add New', 'text_domain'),
'new_item' => __('New Book', 'text_domain'),
'edit_item' => __('Edit Book', 'text_domain'),
'update_item' => __('Update Book', 'text_domain'),
'view_item' => __('View Book', 'text_domain'),
'view_items' => __('View Books', 'text_domain'),
'search_items' => __('Search Book', 'text_domain'),
'not_found' => __('Not found', 'text_domain'),
'not_found_in_trash' => __('Not found in Trash', 'text_domain'),
'featured_image' => __('Featured Image', 'text_domain'),
'set_featured_image' => __('Set featured image', 'text_domain'),
'remove_featured_image' => __('Remove featured image', 'text_domain'),
'use_featured_image' => __('Use as featured image', 'text_domain'),
'insert_into_item' => __('Insert into book', 'text_domain'),
'uploaded_to_this_item' => __('Uploaded to this book', 'text_domain'),
'items_list' => __('Books list', 'text_domain'),
'items_list_navigation' => __('Books list navigation', 'text_domain'),
'filter_items_list' => __('Filter books list', 'text_domain'),
);
$args = array(
'label' => __('Book', 'text_domain'),
'description' => __('Book Description', 'text_domain'),
'labels' => $labels,
'supports' => array('title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields'),
'taxonomies' => array('category', 'post_tag'),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
);
register_post_type('book', $args);
}
add_action('init', 'create_custom_post_type', 0);
?>Шаг 2: Настройка таксономий для собственного типа записи
Для создания таксономий (категорий и меток) для собственного типа записи используйте функцию register_taxonomy(). Ниже приведен пример кода для создания таксономии «Жанры» для типа записи «Books».
<?php
function create_book_taxonomies() {
$labels = array(
'name' => _x('Genres', 'taxonomy general name', 'text_domain'),
'singular_name' => _x('Genre', 'taxonomy singular name', 'text_domain'),
'search_items' => __('Search Genres', 'text_domain'),
'all_items' => __('All Genres', 'text_domain'),
'parent_item' => __('Parent Genre', 'text_domain'),
'parent_item_colon' => __('Parent Genre:', 'text_domain'),
'edit_item' => __('Edit Genre', 'text_domain'),
'update_item' => __('Update Genre', 'text_domain'),
'add_new_item' => __('Add New Genre', 'text_domain'),
'new_item_name' => __('New Genre Name', 'text_domain'),
'menu_name' => __('Genre', 'text_domain'),
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array('slug' => 'genre'),
);
register_taxonomy('genre', array('book'), $args);
}
add_action('init', 'create_book_taxonomies', 0);
?>Шаг 3: Настройка пользовательских полей
Для добавления пользовательских полей к вашему типу записи используйте функцию add_meta_box(). В следующем примере создается пользовательское поле «ISBN» для типа записи «Books».
<?php
function add_isbn_meta_box() {
add_meta_box(
'isbn_meta_box', // Идентификатор метабокса
'ISBN', // Заголовок метабокса
'display_isbn_meta_box', // Callback функция для вывода контента метабокса
'book', // Тип записи
'side', // Положение на экране (normal, advanced, side)
'high' // Приоритет (high, low)
);
}
add_action('add_meta_boxes', 'add_isbn_meta_box');
function display_isbn_meta_box($post) {
$isbn = get_post_meta($post->ID, '_isbn', true);
?>
<label for="isbn">ISBN:</label>
<input type="text" name="isbn" value="<?php echo esc_attr($isbn); ?>" />
<?php
}
function save_isbn_meta_box_data($post_id) {
if (array_key_exists('isbn', $_POST)) {
update_post_meta(
$post_id,
'_isbn',
sanitize_text_field($_POST['isbn'])
);
}
}
add_action('save_post', 'save_isbn_meta_box_data');
?>Шаг 4: Вывод пользовательских типов записи на сайте
Чтобы вывести пользовательский тип записи на сайте, можно использовать цикл WordPress (Loop). В следующем примере показывается, как вывести все записи типа «Books» на отдельной странице.
<?php
$args = array(
'post_type' => 'book',
'posts_per_page' => 10,
);
$loop = new WP_Query($args);
if ($loop->have_posts()) :
while ($loop->have_posts()) : $loop->the_post();
the_title('<h2>', '</h2>');
the_content();
endwhile;
wp_reset_postdata();
else :
echo '<p>No books found.</p>';
endif;
?>Шаг 5: Создание шаблонов для пользовательских типов записи
Для пользовательских типов записи можно создавать отдельные шаблоны. Например, создайте файл single-book.php в вашей теме для индивидуального отображения записей типа «Books».
<?php get_header(); ?>
<?php
if (have_posts()) :
while (have_posts()) : the_post();
?>
<h1><?php the_title(); ?></h1>
<div><?php the_content(); ?></div>
<p>ISBN: <?php echo get_post_meta(get_the_ID(), '_isbn', true); ?></p>
<?php
endwhile;
endif;
?>
<?php get_footer(); ?>Полезные советы и рекомендации
- Перезапуск: Если после создания типа записи он не появляется в админке, попробуйте перезапустить WordPress и обновить постоянные ссылки (Settings > Permalinks).
- Безопасность: Всегда проверяйте и очищайте пользовательские данные, особенно те, что сохраняются в базу данных.
- Кастомизация: Вы можете расширить функциональность своих типов записи, добавляя дополнительные поля, таксономии и создавая кастомные шаблоны для разных целей.
Больше на AIDA
Subscribe to get the latest posts sent to your email.
