am3l1y4 15.03.2023 11:30

Как добавить кастомный метабокс в редактор записей WordPress?

Здравствуйте! У меня возникла проблема с добавлением кастомного метабокса в редактор записей WordPress. Я хочу добавить дополнительное поле в редакторе, чтобы пользователи могли вводить дополнительные данные для каждой записи. Но я не знаю, как это сделать корректно.

Мне нужно, чтобы метабокс отображался только на странице редактирования записи и был доступен только для определенной роли пользователей. Также мне нужно получать значение этого поля и сохранять его в базе данных. Пожалуйста, помогите мне с этой проблемой!


// Пример кода, где требуется помощь
function custom_meta_box() {
    add_meta_box(
        'custom_box', // ID метабокса
        'Дополнительные данные', // Заголовок метабокса
        'custom_meta_box_content', // Функция вывода содержимого метабокса
        'post', // Тип записи
        'normal', // Место расположения метабокса
        'high' // Приоритет метабокса
    );
}

function custom_meta_box_content() {
    // Вывод содержимого метабокса
    ?>
    
    <input type="text" name="custom_field" id="custom_field" value="" />
    <?php
}

add_action( 'add_meta_boxes', 'custom_meta_box' );

Заранее спасибо за помощь!

Ответы:

inna18Care 15.03.2023 11:55
Используйте функцию current_user_can() для проверки роли пользователя и функции get_post_meta() и update_post_meta() для получения и сохранения значения поля в базе данных.
Vicky30Act 15.03.2023 12:07
Вам необходимо добавить проверку роли пользователя и выполнение соответствующих действий только для определенных ролей. Также вам нужно реализовать сохранение значения поля в базе данных.
ImmigrantAnton45 15.03.2023 12:19

Чтобы добавить кастомный метабокс в редактор записей WordPress, вам необходимо внести некоторые изменения в код.

Первым шагом я рекомендую добавить проверку на роль пользователя, чтобы метабокс отображался только для определенной роли. В нашем примере, мы будем показывать метабокс только для пользователей с ролью "Администратор". В противном случае, метабокс будет скрыт:


function custom_meta_box() {
    // Проверяем роль текущего пользователя
    if ( current_user_can( 'administrator' ) ) {
        add_meta_box(
            'custom_box', // ID метабокса
            'Дополнительные данные', // Заголовок метабокса
            'custom_meta_box_content', // Функция вывода содержимого метабокса
            'post', // Тип записи
            'normal', // Место расположения метабокса
            'high' // Приоритет метабокса
        );
    }
}
add_action( 'add_meta_boxes', 'custom_meta_box' );

Теперь метабокс будет отображаться только для пользователей с ролью "Администратор".

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


function save_custom_meta_data( $post_id ) {
    // Проверяем, что поле было отправлено
    if ( isset( $_POST['custom_field'] ) ) {
        // Обрабатываем и сохраняем значение поля
        $custom_field_data = sanitize_text_field( $_POST['custom_field'] );
        update_post_meta( $post_id, 'custom_field', $custom_field_data );
    }
}
add_action( 'save_post', 'save_custom_meta_data' );

Теперь при сохранении записи, значение поля будет сохранено в базе данных.

Наконец, для отображения значения поля в редакторе записи, вам нужно обновить функцию `custom_meta_box_content()`. Вот обновленный код:


function custom_meta_box_content( $post ) {
    // Получаем сохраненное значение поля
    $custom_field_value = get_post_meta( $post->ID, 'custom_field', true );
    // Выводим форму с полем
    ?>
    
    <input type="text" name="custom_field" id="custom_field" value="" />
    <?php
}

Теперь, когда вы откроете страницу редактирования записи, вы увидите метабокс с полем "Дополнительное поле", где можно ввести дополнительные данные. Значение этого поля будет сохранено при сохранении записи.

Надеюсь, это поможет вам решить проблему с добавлением кастомного метабокса в редактор записей WordPress. Если у вас возникнут дополнительные вопросы, пожалуйста, не стесняйтесь спрашивать!

LeilaWidow18 15.03.2023 12:32

Чтобы добавить кастомный метабокс в редактор записей WordPress, вам понадобится использовать функцию add_meta_box(). В вашем коде уже присутствует пример, но давайте я расскажу подробнее о каждой его части.

Функция add_meta_box() позволяет добавить метабокс на страницу редактирования записи. Вот как она работает:


add_meta_box(
    'custom_box', // ID метабокса
    'Дополнительные данные', // Заголовок метабокса
    'custom_meta_box_content', // Функция вывода содержимого метабокса
    'post', // Тип записи
    'normal', // Место расположения метабокса
    'high' // Приоритет метабокса
);

В примере выше:

  • 'custom_box' - это уникальный ID метабокса. Вы можете выбрать любое уникальное имя для своего метабокса.
  • 'Дополнительные данные' - это заголовок метабокса, который будет отображаться на странице редактирования записи.
  • 'custom_meta_box_content' - это функция, которая будет вызываться для вывода содержимого метабокса. В вашем примере она уже определена, но вам нужно будет внести несколько изменений.
  • 'post' - это тип записи, для которого будет отображаться метабокс. В вашем случае - это записи типа "post", но вы можете указать любой другой тип записи, если это необходимо.
  • 'normal' - это место расположения метабокса на странице редактирования записи. В данном случае, метабокс будет отображаться в основной области редактора.
  • 'high' - это приоритет метабокса. Вы можете изменить его на 'low' или 'default', если это необходимо.

Теперь давайте вернемся к функции custom_meta_box_content(). В этой функции вы можете определить, какое содержимое будет отображаться внутри метабокса.


function custom_meta_box_content() {
    // Вывод содержимого метабокса
    ?>
    
    
    <?php
}

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

Теперь осталось реализовать возможность получения и сохранения значения этого поля в базе данных. Для этого вам потребуется использовать хуки save_post и update_post_meta(). Вот пример кода:


function save_custom_meta_box_data( $post_id ) {
    // Проверяем, имеет ли текущий пользователь право редактировать запись
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
    }

    // Проверяем, было ли значение поля отправлено
    if ( ! isset( $_POST['custom_field'] ) ) {
        return;
    }

    // Очищаем значение поля
    $custom_field_value = sanitize_text_field( $_POST['custom_field'] );

    // Сохраняем значение поля в базе данных
    update_post_meta( $post_id, 'custom_field', $custom_field_value );
}
add_action( 'save_post', 'save_custom_meta_box_data' );

В примере выше:

  • Функция save_custom_meta_box_data() вызывается при сохранении записи. Она проверяет, имеет ли текущий пользователь право редактировать запись и получает значение поля, если оно было отправлено.
  • Функция update_post_meta() сохраняет значение поля в базе данных. Вы можете указать уникальный ключ для поля, чтобы избежать конфликтов с другими полями.
  • Хук 'save_post' указывает на то, что функция save_custom_meta_box_data() должна быть вызвана при сохранении записи.

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

Надеюсь, эта информация поможет вам решить вашу проблему. Если у вас возникнут еще вопросы, не стесняйтесь задавать.


Добавить ответ