10.02.2025
Создание дополнительных полей в админке WordPress и вывод их на сайте без использования плагинов ACF
WordPress — это мощная платформа, которая позволяет создавать уникальные сайты с минимальными усилиями. Однако иногда стандартных функций CMS недостаточно, и возникает необходимость добавить дополнительные поля для контента. В этой статье мы расскажем, как создать пользовательские поля (custom fields) в админке WordPress и вывести их на сайте без использования популярного плагина Advanced Custom Fields (ACF).
Зачем нужны дополнительные поля?
Дополнительные поля позволяют расширить возможности стандартных типов записей (постов, страниц и т.д.) в WordPress. Например:
- Добавить цену товара в записи блога.
- Указать автора цитаты.
- Добавить ссылку на внешний ресурс.
- Создать галерею изображений.
Эти поля помогают сделать сайт более гибким и удобным для управления контентом.
Шаг 1: Добавление пользовательских полей через метабоксы
Чтобы добавить дополнительные поля в админку WordPress, нужно использовать метабоксы (meta boxes). Это специальные блоки, которые отображаются на странице редактирования записи.
Код для создания метабокса:
function add_custom_meta_box() {
add_meta_box(
'custom_meta_box_id', // ID метабокса
'Дополнительные поля', // Заголовок метабокса
'render_custom_meta_box', // Функция для отображения содержимого
'post', // Тип записи (например, post, page)
'normal', // Расположение (normal, side, advanced)
'default' // Приоритет (high, core, default, low)
);
}
add_action('add_meta_boxes', 'add_custom_meta_box');
function render_custom_meta_box($post) {
// Получаем значение сохраненного поля
$custom_field_value = get_post_meta($post->ID, '_custom_field_key', true);
// Добавляем nonce для безопасности
wp_nonce_field('custom_meta_box_nonce', 'custom_meta_box_nonce');
// HTML для поля ввода
echo '<label for="custom_field">Введите значение:</label>';
echo '<input type="text" id="custom_field" name="custom_field" value="' . esc_attr($custom_field_value) . '" />';
}
Объяснение кода:
add_meta_box
— регистрирует новый метабокс.render_custom_meta_box
— отображает содержимое метабокса.get_post_meta
— получает сохраненное значение поля.wp_nonce_field
— добавляет защиту от CSRF-атак.
Шаг 2: Сохранение значений дополнительных полей
После создания метабокса нужно сохранить значения, введенные пользователем. Для этого используем хук save_post
.
function save_custom_meta_box_data($post_id) {
// Проверяем nonce
if (!isset($_POST['custom_meta_box_nonce']) || !wp_verify_nonce($_POST['custom_meta_box_nonce'], 'custom_meta_box_nonce')) {
return;
}
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Проверяем права пользователя
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Сохраняем значение поля
if (isset($_POST['custom_field'])) {
update_post_meta($post_id, '_custom_field_key', sanitize_text_field($_POST['custom_field']));
}
}
add_action('save_post', 'save_custom_meta_box_data');
Объяснение кода:
wp_verify_nonce
— проверяет nonce для безопасности.update_post_meta
— сохраняет значение поля в базу данных.sanitize_text_field
— очищает данные для предотвращения XSS-атак.
Шаг 3: Вывод дополнительных полей на сайте
Теперь, когда дополнительные поля созданы и сохранены, их можно вывести на сайте. Используйте функцию get_post_meta
для получения значения.
Пример вывода в шаблоне:
<?php
// Получаем ID текущей записи
$post_id = get_the_ID();
// Получаем значение дополнительного поля
$custom_field_value = get_post_meta($post_id, '_custom_field_key', true);
// Проверяем, есть ли значение, и выводим его
if (!empty($custom_field_value)) {
echo '<p><strong>Значение поля:</strong> ' . esc_html($custom_field_value) . '</p>';
}
?>
Где разместить код:
- Если нужно вывести поле в записи, добавьте код в файл
single.php
. - Если нужно вывести поле в архиве, добавьте код в файл
archive.php
.
Полезные советы
- Используйте префиксы для ключей полей: Чтобы избежать конфликтов с другими плагинами или темами, добавляйте уникальный префикс к ключам полей (например,
_mytheme_custom_field
). - Очищайте данные: Всегда используйте функции очистки данных, такие как
sanitize_text_field
, чтобы предотвратить уязвимости. - Расширяйте функционал: Вы можете добавить несколько полей в один метабокс, используя массивы или повторяющиеся элементы.
Заключение
Создание дополнительных полей в WordPress без использования плагинов, таких как ACF, — это отличный способ научиться работать с внутренними механизмами CMS. Это также помогает лучше понять, как работает WordPress, и дает больше контроля над вашим проектом. Следуя инструкциям из этой статьи, вы сможете легко добавить и вывести пользовательские поля на своем сайте.
Если у вас есть вопросы или предложения, оставляйте комментарии ниже!