Хук add_meta_boxes
в WordPress позволяет добавлять свои метаблоки на страницу редактирования записи любого типа. Хук срабатывает после того, как все встроенные метаблоки WordPress были добавлены, и дает возможность зарегистрировать дополнительные метаблоки для работы с данными прямо в интерфейсе редактора.
do_action( 'add_meta_boxes', string $post_type, WP_Post $post );
Параметры:
$post_type
— строка, обозначающая тип записи, на странице редактирования которой вызывается хук.$post
— объект WP_Post, представляющий текущую запись.
Особенности использования
Хук add_meta_boxes
подходит для добавления метаблоков на любой странице редактирования записи. Однако для ограничения срабатывания только для определенного типа записи рекомендуется использовать add_meta_boxes_{post_type}
, что позволит избежать лишних вызовов для других типов записей.
Пример 1: Добавление метаблока для постов типа post
В этом примере метаблок с ID custom-meta-box
и заголовком «Мой метаблок» будет добавлен на страницу редактирования записи типа post
.
function add_custom_meta_boxes( $post_type, $post ) {
if ( 'post' === $post_type ) {
add_meta_box(
'custom-meta-box', // ID метаблока
'Мой метаблок', // Заголовок метаблока
'render_custom_meta_box', // Функция вывода
$post_type, // Тип записи
'normal', // Контекст, в котором отображается метаблок
'default' // Приоритет отображения
);
}
}
add_action( 'add_meta_boxes', 'add_custom_meta_boxes', 10, 2 );
function render_custom_meta_box( $post ) {
// HTML содержимое метаблока
echo '<p>Введите данные в поле ниже:</p>';
echo '<input type="text" name="custom_field" value="' . esc_attr( get_post_meta( $post->ID, 'custom_field', true ) ) . '" />';
}
Пример 2: Добавление метаблока только для конкретного типа записи через add_meta_boxes_{post_type}
Вместо использования общего хука, можно применить хук с указанием типа записи add_meta_boxes_post
, что позволяет вызывать его исключительно на страницах редактирования записей типа post
.
function add_post_meta_box( $post ) {
add_meta_box(
'specific-meta-box', // ID метаблока
'Специфический метаблок', // Заголовок
'render_specific_meta_box', // Функция вывода
'post', // Тип записи
'side', // Положение метаблока
'high' // Приоритет отображения
);
}
add_action( 'add_meta_boxes_post', 'add_post_meta_box' );
function render_specific_meta_box( $post ) {
echo '<label for="specific_field">Поле данных:</label>';
echo '<input type="text" id="specific_field" name="specific_field" value="' . esc_attr( get_post_meta( $post->ID, 'specific_field', true ) ) . '" />';
}
Сохранение данных из метаблока
Чтобы данные из пользовательских метаблоков сохранялись, нужно дополнительно использовать хук save_post
. Пример ниже демонстрирует, как обработать данные из метаблока при сохранении записи.
function save_custom_meta_box_data( $post_id ) {
if ( isset( $_POST['custom_field'] ) ) {
update_post_meta( $post_id, 'custom_field', sanitize_text_field( $_POST['custom_field'] ) );
}
}
add_action( 'save_post', 'save_custom_meta_box_data' );
Заключение
Использование хука add_meta_boxes
и его специализированного варианта add_meta_boxes_{post_type}
предоставляет гибкий способ добавления пользовательских метаблоков в WordPress. Это позволяет расширить возможности редактирования записей и предоставляет пользователям удобный интерфейс для ввода и редактирования данных.