В 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, для ускорения разработки и удобства управления.