Создание дополнительных полей в админке 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) . '" />';
}

Объяснение кода:

  1. add_meta_box — регистрирует новый метабокс.
  2. render_custom_meta_box — отображает содержимое метабокса.
  3. get_post_meta — получает сохраненное значение поля.
  4. 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');

Объяснение кода:

  1. wp_verify_nonce — проверяет nonce для безопасности.
  2. update_post_meta — сохраняет значение поля в базу данных.
  3. 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.

Полезные советы

  1. Используйте префиксы для ключей полей: Чтобы избежать конфликтов с другими плагинами или темами, добавляйте уникальный префикс к ключам полей (например, _mytheme_custom_field).
  2. Очищайте данные: Всегда используйте функции очистки данных, такие как sanitize_text_field, чтобы предотвратить уязвимости.
  3. Расширяйте функционал: Вы можете добавить несколько полей в один метабокс, используя массивы или повторяющиеся элементы.

Заключение

Создание дополнительных полей в WordPress без использования плагинов, таких как ACF, — это отличный способ научиться работать с внутренними механизмами CMS. Это также помогает лучше понять, как работает WordPress, и дает больше контроля над вашим проектом. Следуя инструкциям из этой статьи, вы сможете легко добавить и вывести пользовательские поля на своем сайте.

Если у вас есть вопросы или предложения, оставляйте комментарии ниже!