Как добавить расширенные типы данных в WordPress

Работа с расширенными типами данных в WordPress позволяет создавать более гибкие и мощные решения для сайтов любого уровня. В данной статье мы подробно рассмотрим, как добавить и эффективно использовать расширенные типы данных, такие как сложные поля, повторяющиеся группы и вложенные структуры, используя как нативные средства WordPress, так и популярные плагины.

Почему стандартных типов данных WordPress может быть недостаточно

WordPress из коробки предоставляет базовые типы данных: посты, страницы, метаданные и таксономии. Однако при создании сложных проектов часто возникает необходимость работать с более сложными структурами данных, например, повторяющимися полями, вложенными списками или связями между разными типами записей.

Например, для сайта недвижимости может потребоваться добавить несколько адресов, контактов или характеристик к одному объекту. Стандартные метаполя не всегда удобно структурируют такую информацию, и без правильного подхода код становится громоздким и неудобным для поддержки.

Чтобы решить эти задачи, можно использовать расширенные типы данных, которые обеспечивают:

  • Удобное хранение и отображение сложных структур;
  • Гибкую настройку интерфейса для редактирования;
  • Простоту интеграции в шаблоны и запросы;
  • Оптимизацию запросов к базе данных.

Создание расширенных типов данных с помощью кода

Для начала разберём, как добавить расширенные поля с помощью PHP и нативных возможностей WordPress, не прибегая к плагинам.

Добавление повторяющихся полей

Повторяющиеся поля — это, например, список контактов или галерея изображений, где количество элементов может меняться. Для создания такого функционала можно использовать метаполя с сериализацией или JSON.

Пример функции для сохранения массива повторяющихся данных в метаполе:

function wpco_save_repeated_fields($post_id) {
    if (!isset($_POST['wpco_repeated'])) return;
    $data = array_map('sanitize_text_field', $_POST['wpco_repeated']);
    update_post_meta($post_id, '_wpco_repeated', $data);
}
add_action('save_post', 'wpco_save_repeated_fields');

В форме редактирования поста можно выводить поля так:

function wpco_show_repeated_fields($post) {
    $values = get_post_meta($post->ID, '_wpco_repeated', true);
    if (!is_array($values)) $values = [''];
    foreach ($values as $key => $value) {
        echo '<input type="text" name="wpco_repeated[]" value="'.esc_attr($value).'" />';
    }
    echo '<button type="button" id="add_field">Добавить</button>';
}
add_action('add_meta_boxes', function() {
    add_meta_box('wpco_repeated_box', 'Повторяющиеся поля', 'wpco_show_repeated_fields', 'post');
});

JavaScript для динамического добавления полей:

document.getElementById('add_field').addEventListener('click', function() {
    const container = this.parentNode;
    const input = document.createElement('input');
    input.type = 'text';
    input.name = 'wpco_repeated[]';
    container.insertBefore(input, this);
});

Хранение вложенных структур в метаполях

Для вложенных данных можно использовать JSON в метаполях:

function wpco_save_nested_data($post_id) {
    if (!isset($_POST['wpco_nested'])) return;
    $nested = json_decode(stripslashes($_POST['wpco_nested']), true);
    if (json_last_error() === JSON_ERROR_NONE) {
        update_post_meta($post_id, '_wpco_nested', $nested);
    }
}
add_action('save_post', 'wpco_save_nested_data');

В форме редактирования можно использовать JavaScript с JSON-редактором или кастомным интерфейсом для ввода таких данных.

Использование плагинов для расширенных типов данных

Если хочется сэкономить время и получить готовые решения, стоит обратить внимание на плагины, которые реализуют расширенные типы данных:

  • Advanced Custom Fields (ACF) — один из самых популярных плагинов для создания сложных полей, включая повторяющиеся группы (repeater), гибкие контент-блоки, вложенные поля и многое другое.
  • Meta Box — мощный плагин с поддержкой повторяющихся и вложенных полей, а также удобным API для разработчиков.
  • Pods Framework — позволяет создавать кастомные типы записей и таксономии с расширенными полями.

Например, для создания повторяющихся полей с помощью ACF:

if( function_exists('acf_add_local_field_group') ) {
    acf_add_local_field_group(array(
        'key' => 'group_wpco_contacts',
        'title' => 'Контакты',
        'fields' => array(
            array(
                'key' => 'field_wpco_repeater',
                'label' => 'Список контактов',
                'name' => 'wpco_contacts',
                'type' => 'repeater',
                'sub_fields' => array(
                    array(
                        'key' => 'field_wpco_contact_name',
                        'label' => 'Имя',
                        'name' => 'name',
                        'type' => 'text',
                    ),
                    array(
                        'key' => 'field_wpco_contact_phone',
                        'label' => 'Телефон',
                        'name' => 'phone',
                        'type' => 'text',
                    ),
                ),
            ),
        ),
        'location' => array(
            array(
                array(
                    'param' => 'post_type',
                    'operator' => '==',
                    'value' => 'post',
                ),
            ),
        ),
    ));
}

Такой подход позволяет без сложного кода создавать удобные для пользователя интерфейсы и получать структурированные данные.

Оптимизация работы с расширенными типами данных

Расширенные типы данных требуют аккуратного подхода к хранению и выборке, чтобы не создавать лишнюю нагрузку на базу данных. Рекомендуется:

  • Использовать правильные типы полей — текст, число, дата, связь — чтобы облегчить фильтрацию;
  • Минимизировать сериализацию больших данных, отдавая предпочтение JSON с индексацией;
  • Кешировать результаты сложных запросов;
  • При необходимости создавать дополнительные таблицы для хранения сложных структур, если данные очень объемные или требуют сложных связей.

Плагин Clearfy Pro из WPSHOP может помочь оптимизировать работу сайта при использовании сложных типов данных, отключая ненужные функции и ускоряя загрузку.

Пример использования расширенных типов данных в шаблоне

После сохранения повторяющихся полей их удобно выводить в шаблоне с помощью цикла:

function wpco_display_repeated_fields($post_id) {
    $items = get_post_meta($post_id, '_wpco_repeated', true);
    if (!empty($items) && is_array($items)) {
        echo '<ul>';
        foreach ($items as $item) {
            echo '<li>' . esc_html($item) . '</li>';
        }
        echo '</ul>';
    } else {
        echo 'Данные отсутствуют';
    }
}

Для ACF повторяющихся полей вывод будет таким:

if( have_rows('wpco_contacts') ) {
    echo '<ul>';
    while ( have_rows('wpco_contacts') ) {
        the_row();
        $name = get_sub_field('name');
        $phone = get_sub_field('phone');
        echo '<li>' . esc_html($name) . ': ' . esc_html($phone) . '</li>';
    }
    echo '</ul>';
} else {
    echo 'Контакты не заданы';
}

Заключение

Добавление расширенных типов данных в WordPress позволяет создавать более сложные и функциональные проекты, улучшая структуру и удобство работы с контентом. Используйте нативные методы для простых задач и подключайте профессиональные плагины, такие как ACF или Meta Box, чтобы ускорить разработку и получить качественный результат.

Для повышения производительности и безопасности сайта рекомендуем ознакомиться с возможностями Clearfy Pro и других продуктов из каталога WPSHOP.

Как автоматизировать удаление старого контента в WordPress
08.02.2026
Как установить ограничения на размер файлов в WordPress
30.01.2026
Как отфильтровать записи по полям Advanced Custom Fields в WordPress
15.12.2025
Как добавить поддержку JSON-LD в WordPress
19.01.2026
Как сделать защиту от спама в комментариях WordPress
14.11.2025