Вопрос или проблема
Вопрос новичка: Ищу пример, как создать пользовательский тип записи с дополнительными элементами. Я имею в виду: в моем коде есть базовые элементы, такие как ‘заголовок’, ‘редактор’ … но мне также нужны, например, ‘начало’, ‘конец’ – поля для дат или ‘цвет’. Как этого добиться?
Вы можете использовать add_meta_box
(см. также заметки, внесенные пользователями, для примеров), чтобы добавить пользовательские поля к вашему пользовательскому типу записи. Если вы не хотите добавлять метабоксы самостоятельно, вы также можете использовать плагин для пользовательских полей (например, Advanced Custom Fields, CMB2, Pods, Carbon Fields … я не связан с ни одним из них), чтобы сделать это за вас.
Существуют хорошие статьи с примерами кода о пользовательских метаполях и пользовательских типах записей в руководстве для разработчиков. Вам стоит с ними ознакомиться.
Если вам нужно группировать пользовательские записи или выполнять сортировку или поиск на основе дополнительной информации (цвет, возможно?), то рассмотрите возможность использования пользовательской таксономии вместо этого.
Ответ или решение
Для создания пользовательского типа записи (Custom Post Type) с дополнительными полями в WordPress вам необходимо пройти несколько шагов. Здесь я предложу детальный подход, который поможет вам справиться с этой задачей.
Шаг 1: Регистрация пользовательского типа записи
Первоначально вы должны зарегистрировать ваш пользовательский тип записи, используя функцию register_post_type()
. В этом примере мы создадим тип записи под названием "События".
add_action('init', 'create_custom_post_type');
function create_custom_post_type() {
$args = array(
'label' => 'События',
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail'), // здесь указываете стандартные поля
'rewrite' => array('slug' => 'events'),
);
register_post_type('events', $args);
}
Шаг 2: Добавление дополнительных полей
Для добавления дополнительных полей, таких как ‘начало’ и ‘конец’ (поля даты) или ‘цвет’, рекомендуем использовать метабоксы через функцию add_meta_box()
. Это позволит вам создать пользовательские поля в редакторе записи.
add_action('add_meta_boxes', 'add_custom_meta_box');
function add_custom_meta_box() {
add_meta_box(
'event_details', // ID метабокса
'Детали события', // Заголовок
'render_event_meta_box', // Функция для отображения HTML
'events', // Тип записи
'normal', // Положение
'high' // Приоритет
);
}
function render_event_meta_box($post) {
// Поля для даты
$start_date = get_post_meta($post->ID, 'start_date', true);
$end_date = get_post_meta($post->ID, 'end_date', true);
$color = get_post_meta($post->ID, 'event_color', true);
echo '<label for="start_date">Дата начала:</label>';
echo '<input type="date" id="start_date" name="start_date" value="' . esc_attr($start_date) . '"/>';
echo '<label for="end_date">Дата окончания:</label>';
echo '<input type="date" id="end_date" name="end_date" value="' . esc_attr($end_date) . '"/>';
echo '<label for="event_color">Цвет:</label>';
echo '<input type="text" id="event_color" name="event_color" value="' . esc_attr($color) . '" />';
}
Шаг 3: Сохранение пользовательских полей
Необходимо сохранить значения пользовательских полей, когда запись сохраняется. Это делается с помощью хука save_post
.
add_action('save_post', 'save_event_meta_box_data');
function save_event_meta_box_data($post_id) {
// Проверка прав пользователя
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Сохранение мета данных
if (isset($_POST['start_date'])) {
update_post_meta($post_id, 'start_date', sanitize_text_field($_POST['start_date']));
}
if (isset($_POST['end_date'])) {
update_post_meta($post_id, 'end_date', sanitize_text_field($_POST['end_date']));
}
if (isset($_POST['event_color'])) {
update_post_meta($post_id, 'event_color', sanitize_text_field($_POST['event_color']));
}
}
Дополнительные рекомендации
-
Плагины для пользовательских полей: Если вы хотите упростить процесс, можете воспользоваться плагинами для управления пользовательскими полями, такими как Advanced Custom Fields (ACF) или CMB2.
-
Кастомизация вывода: Для изменения вывода пользовательских полей в ваших шаблонах, используйте
get_post_meta()
для извлечения значений и выводите их в нужных местах вашего кода. -
Кастомные таксономии: Если вы планируете группировать записи или делать их фильтрацию по дополнительным атрибутам (например, по цветам), рассмотрите возможность использовать кастомные таксономии.
Заключение
Создание пользовательского типа записи с дополнительными полями в WordPress – это эффективный способ настроить платформу под свои нужды. Следуя указанным шагам, вы сможете без особых трудностей добавлять и управлять дополнительной информацией в своих записях. Не забывайте о регулярном резервном копировании данных и тестировании вашего кода на локальной среде, прежде чем вы будете вносить изменения на боевом сайте.