wpconsult.ru wordpress WP Consult

Как создать уникальные поля (custom fields) в WordPress без плагинов

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

Что такое уникальные поля в WordPress и зачем они нужны

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

Часто разработчики прибегают к плагинам, таким как Advanced Custom Fields (ACF), но если вы хотите минимизировать количество внешних зависимостей и лучше понять работу WordPress, лучше разобраться, как создавать и использовать уникальные поля самостоятельно.

Добавление уникальных полей в админке WordPress

Для начала можно добавить поддержку мета-полей через стандартный механизм meta boxes. Для этого нужно зарегистрировать мета-бокс с помощью функции add_meta_box. Ниже пример кода, который добавляет поле "Дополнительная информация" к постам:

function wpconsult_add_custom_meta_box() {
    add_meta_box(
        'wpconsult_meta_box', // ID мета-бокса
        'Дополнительная информация', // Заголовок
        'wpconsult_meta_box_callback', // Callback-функция
        'post', // Тип записи
        'normal', // Контекст
        'default' // Приоритет
    );
}
add_action('add_meta_boxes', 'wpconsult_add_custom_meta_box');

function wpconsult_meta_box_callback($post) {
    wp_nonce_field('wpconsult_meta_box_nonce', 'wpconsult_meta_box_nonce_field');
    $value = get_post_meta($post->ID, '_wpconsult_custom_field', true);
    echo '<label for="wpconsult_custom_field">Введите значение:</label>';
    echo '<input type="text" id="wpconsult_custom_field" name="wpconsult_custom_field" value="' . esc_attr($value) . '" size="25" />';
}

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

Сохранение данных уникальных полей при сохранении записи

Чтобы сохранить данные, которые ввел пользователь в мета-боксе, нужно повесить обработчик на хук save_post. В нем следует проверить nonce, права пользователя, а затем записать мета-данные.

function wpconsult_save_custom_meta_box_data($post_id) {
    if (!isset($_POST['wpconsult_meta_box_nonce_field'])) {
        return;
    }
    if (!wp_verify_nonce($_POST['wpconsult_meta_box_nonce_field'], 'wpconsult_meta_box_nonce')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (!isset($_POST['wpconsult_custom_field'])) {
        return;
    }
    $my_data = sanitize_text_field($_POST['wpconsult_custom_field']);
    update_post_meta($post_id, '_wpconsult_custom_field', $my_data);
}
add_action('save_post', 'wpconsult_save_custom_meta_box_data');

Так мы обеспечиваем корректное и безопасное сохранение данных.

Вывод уникальных полей в шаблоне темы

Чтобы вывести значение уникального поля на сайте, в шаблоне используйте функцию get_post_meta. Например, в single.php:

$custom_value = get_post_meta(get_the_ID(), '_wpconsult_custom_field', true);
if (!empty($custom_value)) {
    echo '<div class="wpconsult-custom-field">Дополнительная информация: ' . esc_html($custom_value) . '</div>';
}

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

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

Можно создавать более сложные поля, например, с выбором даты. Для этого используем HTML5 input type="date".

function wpconsult_add_date_meta_box() {
    add_meta_box('wpconsult_date_meta_box', 'Дата события', 'wpconsult_date_meta_box_callback', 'post');
}
add_action('add_meta_boxes', 'wpconsult_add_date_meta_box');

function wpconsult_date_meta_box_callback($post) {
    wp_nonce_field('wpconsult_date_meta_box_nonce', 'wpconsult_date_meta_box_nonce_field');
    $value = get_post_meta($post->ID, '_wpconsult_event_date', true);
    echo '<label for="wpconsult_event_date">Выберите дату:</label>';
    echo '<input type="date" id="wpconsult_event_date" name="wpconsult_event_date" value="' . esc_attr($value) . '" />';
}

function wpconsult_save_date_meta_box_data($post_id) {
    if (!isset($_POST['wpconsult_date_meta_box_nonce_field'])) return;
    if (!wp_verify_nonce($_POST['wpconsult_date_meta_box_nonce_field'], 'wpconsult_date_meta_box_nonce')) return;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    if (!current_user_can('edit_post', $post_id)) return;
    if (!isset($_POST['wpconsult_event_date'])) return;
    $date = sanitize_text_field($_POST['wpconsult_event_date']);
    update_post_meta($post_id, '_wpconsult_event_date', $date);
}
add_action('save_post', 'wpconsult_save_date_meta_box_data');

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

Использование уникальных полей для фильтрации и сортировки записей

Уникальные поля можно использовать для выборки записей с нужными параметрами. Например, получить все записи с определённым значением поля:

$args = [
    'post_type' => 'post',
    'meta_key' => '_wpconsult_custom_field',
    'meta_value' => 'нужное значение',
];
$query = new WP_Query($args);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_title('<h2>', '</h2>');
    }
    wp_reset_postdata();
}

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

$args = [
    'post_type' => 'post',
    'meta_key' => '_wpconsult_event_date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
];
$query = new WP_Query($args);

Это отличный инструмент для вывода событий по дате, товаров по цене и т.п.

Советы по работе с уникальными полями без плагинов

  • Всегда используйте префиксы в названиях ключей мета-полей для избежания конфликтов, например, _wpconsult_.
  • Обеспечьте безопасность с помощью nonce и проверки прав.
  • Старайтесь очищать данные при сохранении с помощью функций sanitize_text_field, esc_attr и других.
  • Для сложных полей (повторяющиеся группы, вкладки) лучше писать собственные классы или использовать лёгкие библиотеки.
  • Если функционал становится слишком сложным, можно рассмотреть плагины, например, Clearfy Pro для оптимизации и управления мета-данными.

Заключение

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

×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙