Рубрики
WordPress

Как создать собственный тип записи в WordPress

Узнайте, как создать собственный тип записи (Custom Post Type) в WordPress, чтобы организовать контент по-новому. Подробное руководство с примерами кода.

Создание собственного типа записи (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.