Разработка кастомных полей через Meta Box для WordPress

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка кастомных полей через Meta Box для WordPress
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Разработка кастомных полей через Meta Box для WordPress

Meta Box — альтернатива ACF для создания кастомных полей в WordPress. Основное преимущество перед ACF: бесплатная версия полноценна для большинства задач, все расширения (Relationships, Group, Frontend Submission) покупаются отдельно и дешевле, а API строится через PHP без зависимости от GUI — что удобно при code-first подходе. Настройка группы полей занимает от нескольких часов до 1 дня.

Регистрация поля через PHP API

add_filter('rwmb_meta_boxes', function (array $meta_boxes): array {

    $meta_boxes[] = [
        'id'         => 'project_details',
        'title'      => 'Детали проекта',
        'post_types' => ['project'],
        'priority'   => 'high',
        'fields'     => [
            [
                'id'          => 'project_client',
                'name'        => 'Клиент',
                'type'        => 'text',
                'required'    => true,
                'placeholder' => 'Название компании-клиента',
                'size'        => 50,
                'columns'     => 6, // 6/12 = половина ширины
            ],
            [
                'id'      => 'project_year',
                'name'    => 'Год',
                'type'    => 'number',
                'min'     => 2000,
                'max'     => 2030,
                'std'     => date('Y'),
                'columns' => 3,
            ],
            [
                'id'      => 'project_status',
                'name'    => 'Статус',
                'type'    => 'select',
                'options' => [
                    'active'    => 'Активный',
                    'completed' => 'Завершён',
                    'paused'    => 'На паузе',
                ],
                'std'     => 'completed',
                'columns' => 3,
            ],
            [
                'id'            => 'project_url',
                'name'          => 'URL проекта',
                'type'          => 'url',
                'placeholder'   => 'https://',
            ],
            [
                'id'          => 'project_budget',
                'name'        => 'Бюджет (тыс. руб.)',
                'type'        => 'number',
                'min'         => 0,
                'step'        => 10,
                'placeholder' => '0',
                'admin_only'  => true, // видно только в /wp-admin
            ],
            [
                'id'   => 'project_description',
                'name' => 'Внутреннее описание',
                'type' => 'textarea',
                'rows' => 4,
                'desc' => 'Не отображается на сайте, только для внутреннего использования',
            ],
        ],
    ];

    return $meta_boxes;
});

Поля изображений и файлов

[
    'id'             => 'project_cover',
    'name'           => 'Обложка проекта',
    'type'           => 'image_advanced',
    'max_file_uploads' => 1,
    'force_delete'   => false,
    'image_size'     => 'large',
    'columns'        => 6,
],
[
    'id'             => 'project_gallery',
    'name'           => 'Галерея',
    'type'           => 'image_advanced',
    'max_file_uploads' => 15,
    'image_size'     => 'medium',
    'add_to'         => 'end',
],
[
    'id'   => 'project_brief',
    'name' => 'Бриф (PDF)',
    'type' => 'file_advanced',
    'mime_type' => 'application/pdf',
    'max_file_uploads' => 1,
],

Получение на фронтенде:

// Одно изображение
$cover = rwmb_meta('project_cover', ['size' => 'large'], $post_id);
if ($cover) {
    echo '<img src="' . esc_url($cover[0]['url']) . '" alt="' . esc_attr($cover[0]['alt']) . '">';
}

// Галерея
$gallery = rwmb_meta('project_gallery', ['size' => 'medium'], $post_id);
foreach ($gallery as $image) {
    echo '<img src="' . esc_url($image['url']) . '" loading="lazy">';
}

Group — вложенные поля

Meta Box Group (платный аддон) позволяет создавать вложенные группы и клонируемые блоки:

[
    'id'     => 'project_team',
    'name'   => 'Команда',
    'type'   => 'group',
    'clone'  => true,
    'sort_clone' => true,
    'add_button' => 'Добавить участника',
    'fields' => [
        ['id' => 'member_name', 'name' => 'Имя',       'type' => 'text',  'columns' => 4],
        ['id' => 'member_role', 'name' => 'Роль',       'type' => 'text',  'columns' => 4],
        ['id' => 'member_photo','name' => 'Фото',       'type' => 'image', 'columns' => 4],
        ['id' => 'member_hours','name' => 'Часов/нед',  'type' => 'number','columns' => 3],
    ],
],
$team = rwmb_meta('project_team', [], $post_id);
foreach ($team as $member) {
    echo '<div class="team-member">';
    if (!empty($member['member_photo'])) {
        $photos = array_values($member['member_photo']);
        echo '<img src="' . esc_url($photos[0]['url']) . '">';
    }
    echo '<strong>' . esc_html($member['member_name']) . '</strong>';
    echo '<span>' . esc_html($member['member_role']) . '</span>';
    echo '</div>';
}

Условное отображение через visible

[
    'id'   => 'show_testimonial',
    'name' => 'Добавить отзыв клиента',
    'type' => 'switch',
    'style'=> 'rounded',
],
[
    'id'      => 'testimonial_text',
    'name'    => 'Текст отзыва',
    'type'    => 'textarea',
    'visible' => ['show_testimonial', '=', true],
],
[
    'id'      => 'testimonial_author',
    'name'    => 'Автор',
    'type'    => 'text',
    'visible' => ['show_testimonial', '=', true],
    'columns' => 6,
],

Поля для таксономий и настроек сайта

Meta Box поддерживает метабоксы не только для записей:

// Поле для термина таксономии
$meta_boxes[] = [
    'id'         => 'category_color',
    'title'      => 'Дополнительно',
    'taxonomies' => ['project_category'],
    'fields'     => [
        ['id' => 'color', 'name' => 'Цвет', 'type' => 'color'],
        ['id' => 'icon',  'name' => 'Иконка SVG', 'type' => 'textarea', 'rows' => 3],
    ],
];

// Страница настроек
$meta_boxes[] = [
    'id'             => 'site_settings',
    'title'          => 'Настройки сайта',
    'settings_pages' => ['site-settings'],
    'fields'         => [
        ['id' => 'company_phone', 'name' => 'Телефон', 'type' => 'text'],
        ['id' => 'company_email', 'name' => 'Email',   'type' => 'email'],
        ['id' => 'company_logo',  'name' => 'Логотип', 'type' => 'image'],
    ],
];

Meta Box vs ACF: когда что выбирать

Meta Box предпочтительнее, когда проект строится code-first и нужна минимальная зависимость от платного ядра. ACF PRO целесообразен, если команда привыкла к его GUI-конструктору и Flexible Content. Производительность обоих плагинов сопоставима: оба используют wp_postmeta, оба деградируют при тысячах записей с десятками полей.

Для высоконагруженных проектов с большими объёмами данных обе библиотеки стоит заменять кастомными таблицами с оптимизированными индексами.