Как создать уникальный вид записи в WordPress с помощью кода

В WordPress стандартный вид отображения записей и страниц часто не подходит для специфических задач сайта. Чтобы сделать уникальный вид записи — например, для портфолио, отзывов или кейсов — можно создать собственный шаблон вывода записи, не прибегая к плагинам. В этой статье разберём, как с помощью кода создать уникальный вид записи для определённого типа записи.

Создание индивидуального шаблона для типа записи — "Уникальный вид"

Для начала убедитесь, что у вас есть собственный тип записи, например, wpset_portfolio. Если его нет, создайте через функцию wpset_register_custom_post_type() (пример ниже). После этого создадим шаблон для вывода записей этого типа.

Регистрация типа записи wpset_portfolio

function wpset_register_custom_post_type() {
    $labels = array(
        'name' => 'Портфолио',
        'singular_name' => 'Портфолио',
        'add_new' => 'Добавить элемент',
        'add_new_item' => 'Добавить новый элемент портфолио',
        'edit_item' => 'Редактировать элемент',
        'new_item' => 'Новый элемент',
        'view_item' => 'Просмотреть элемент',
        'search_items' => 'Поиск в портфолио',
        'not_found' => 'Элементы не найдены',
        'not_found_in_trash' => 'В корзине элементов не найдено',
        'menu_name' => 'Портфолио'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'portfolio'),
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'show_in_rest' => true
    );

    register_post_type('wpset_portfolio', $args);
}
add_action('init', 'wpset_register_custom_post_type');

Этот код регистрирует тип записи wpset_portfolio с поддержкой заголовка, контента, миниатюры и пользовательских полей.

Создание шаблона single-wpset_portfolio.php

Чтобы вывести уникальный вид записи, создайте файл single-wpset_portfolio.php в папке вашей темы. В этом файле можно полностью контролировать вывод записи и добавить кастомный HTML и стили.

Пример базового шаблона для типа записи Портфолио

<?php get_header(); ?>

<div class="wpset-portfolio-single">
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

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

        <div class="portfolio-thumbnail">
            <?php if ( has_post_thumbnail() ) {
                the_post_thumbnail('large');
            } ?>
        </div>

        <div class="portfolio-content">
            <?php the_content(); ?>
        </div>

        <div class="portfolio-meta">
            <strong>Клиент:</strong> <?php echo get_post_meta( get_the_ID(), 'wpset_client_name', true ); ?><br>
            <strong>Год проекта:</strong> <?php echo get_post_meta( get_the_ID(), 'wpset_project_year', true ); ?>
        </div>

    <?php endwhile; endif; ?>
</div>

<?php get_footer(); ?>

Здесь мы выводим заголовок, миниатюру, контент и пользовательские поля клиента и год проекта. Такой шаблон уже заметно отличается от стандартных записей.

Добавление пользовательских метаполей в админке

Чтобы добавить поля wpset_client_name и wpset_project_year, используйте метабоксы. Ниже пример, как добавить метабокс с сохранением данных.

Пример создания метабокса

function wpset_add_portfolio_metabox() {
    add_meta_box(
        'wpset_portfolio_meta',
        'Детали проекта',
        'wpset_portfolio_metabox_callback',
        'wpset_portfolio',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpset_add_portfolio_metabox');

function wpset_portfolio_metabox_callback( $post ) {
    wp_nonce_field( 'wpset_save_portfolio_meta', 'wpset_portfolio_nonce' );

    $client = get_post_meta( $post->ID, 'wpset_client_name', true );
    $year = get_post_meta( $post->ID, 'wpset_project_year', true );

    echo '<p><label>Клиент: </label><input type="text" name="wpset_client_name" value="'.esc_attr($client).'" style="width:100%;" /></p>';
    echo '<p><label>Год проекта: </label><input type="number" name="wpset_project_year" value="'.esc_attr($year).'" style="width:100px;" /></p>';
}

function wpset_save_portfolio_meta( $post_id ) {
    if (!isset($_POST['wpset_portfolio_nonce']) || !wp_verify_nonce($_POST['wpset_portfolio_nonce'], 'wpset_save_portfolio_meta')) {
        return;
    }

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    if (isset($_POST['wpset_client_name'])) {
        update_post_meta($post_id, 'wpset_client_name', sanitize_text_field($_POST['wpset_client_name']));
    }

    if (isset($_POST['wpset_project_year'])) {
        update_post_meta($post_id, 'wpset_project_year', intval($_POST['wpset_project_year']));
    }
}
add_action('save_post', 'wpset_save_portfolio_meta');

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

Вывод нескольких записей с уникальным видом

Чтобы вывести список ваших портфолио с кастомной разметкой, используйте WP_Query с шаблоном вывода в цикле.

Пример WP_Query для вывода портфолио

$args = array(
    'post_type' => 'wpset_portfolio',
    'posts_per_page' => 10,
    'orderby' => 'date',
    'order' => 'DESC'
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<div class="wpset-portfolio-list">';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<div class="portfolio-item">';
        if (has_post_thumbnail()) {
            the_post_thumbnail('medium');
        }
        echo '<h2>' . get_the_title() . '</h2>';
        echo '<p>' . get_the_excerpt() . '</p>';
        echo '</div>';
    }
    echo '</div>';
    wp_reset_postdata();
} else {
    echo '<p>Портфолио не найдено.</p>';
}

Этот код можно вставить в страницу или шаблон, чтобы красиво вывести список проектов.

Использование плагинов для расширения функционала

Если вы предпочитаете не писать код для метабоксов, можно использовать плагин Clearfy Pro, который позволяет легко создавать и управлять пользовательскими полями и типами записей через удобный интерфейс.

Для вывода портфолио с фильтрацией отлично подойдёт ABC Pagination — плагин, который позволяет создавать многоуровневую пагинацию и фильтры для любых типов записей.

Вывод: уникальный вид записи — ключ к индивидуальности сайта

Создание уникального вида записи в WordPress позволяет вам максимально адаптировать вывод контента под задачи проекта. Используя кастомные типы записей, метабоксы и собственные шаблоны, вы получаете полный контроль над структурой и дизайном. При этом можно комбинировать ручной код с функционалом мощных плагинов, таких как Clearfy Pro и ABC Pagination, для ускорения разработки и удобства управления.

Как удалить неиспользуемые виджеты в WordPress с помощью кода
14.04.2026
Как создать многоуровневую пагинацию в WordPress: подробное руководство
21.12.2025
Как удалить неиспользуемые метаполя в WordPress: практическое руководство
12.02.2026
Решение проблемы неработающего AJAX в WordPress
16.02.2026
Как удалить все неактивные пользователи в WordPress с помощью кода
10.01.2026