Как создать два или более метабоксов в WordPress?

Как мне создать несколько метабоксов, содержащих разные галереи в каждом из них?
  • 4 декабря 2023 г. 10:19
Ответы на вопрос 7
Для создания нескольких метабоксов в WordPress вы можете использовать следующий подход:

1. Добавьте соответствующий PHP-код в файл `functions.php` вашей темы, либо создайте плагин. Ниже пример кода для добавления одного метабокса:

```php
add_action('add_meta_boxes', 'my_custom_meta_boxes');

function my_custom_meta_boxes() {
    add_meta_box(
        'my_custom_meta_box_1',          // ID of the metabox
        'Мой Кастомный Метабокс 1',      // Title of the metabox
        'my_custom_meta_box_callback_1',  // Callback function
        'post',                          // Post type
        'normal',                        // Context (where to display)
        'default'                        // Priority
    );

    // Для добавления второго метабокса просто повторите add_meta_box() с другими параметрами.
    add_meta_box(
        'my_custom_meta_box_2',          // ID of the metabox
        'Мой Кастомный Метабокс 2',      // Title of the metabox
        'my_custom_meta_box_callback_2',  // Callback function
        'post',                          // Post type
        'side',                          // Context (where to display)
        'default'                        // Priority
    );
}

// Колбэк для первого метабокса
function my_custom_meta_box_callback_1($post) {
    // здесь ваш HTML код или вызов функции вывода содержимого для первого метабокса
}

// Колбэк для второго метабокса
function my_custom_meta_box_callback_2($post) {
    // здесь ваш HTML код или вызов функции вывода содержимого для второго метабокса
}
```

2. Для каждого метабокса создайте каллбэк функцию, которая будет отвечать за вывод содержимого (в данном случае - галереи).

3. Для реализации функциональности галерей вам потребуется использовать JavaScript и/или jQuery, чтобы внедрить возможность загрузки и выбора изображений через встроенные в WordPress медиа-функции.

Далее необходимо обеспечить сохранение данных при сохранении поста, добавив хук `save_post`:

```php
add_action('save_post', 'my_custom_save_post');

function my_custom_save_post($post_id) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
        return;

    // Проверяем nonce, если нужно

    // Проверяем права пользователя

    // Сохраняем данные из метабоксов
    if(isset($_POST['my_custom_field_1'])) {
        update_post_meta($post_id, 'my_custom_field_1', $_POST['my_custom_field_1']);
    }

    if(isset($_POST['my_custom_field_2'])) {
        update_post_meta($post_id, 'my_custom_field_2', $_POST['my_custom_field_2']);
    }

    // Повторите шаги для дополнительных полей
}
```

Этот код — всего лишь отправная точка для создания метабоксов. Чтобы в них вставить галереи, вам понадобится более сложный JavaScript, который взаимодействут со стандартной медиа-библиотекой WordPress, и вам нужно будет корректно обработать сохранение прикрепленных изображений.

Если вам не комфортно работать с кодом напрямую, вы также можете использовать плагины для создания метабоксов, например, Advanced Custom Fields (ACF), CMB2 или Meta Box, которые предоставляют более удобный интерфейс для добавления и управления кастомными полями, в том числе гал
Убедитесь, что nonce (мера безопасности) для метаполей галереи проверяется корректно перед сохранением 
 Проверьте, что текущий пользователь имеет права на редактирование поста, прежде чем продолжать 
 Пропустите сохранение метаполей, если происходит автоматическое сохранение в WordPress (чтобы избежать ошибок) 
 Если в POST-запросе передаются изображения для первой галереи, проведите очистку данных и обновите метаполе в посте 
 Если в POST-запросе передаются изображения для второй галереи, очистите и обновите соответствующее метаполе в посте 
 Если необходимо добавить больше галерей, необходимо создать дополнительную логику с использованием счётчика для обработки каждой галереи индивидуально.
Похожие вопросы