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

В этом посте я объясню, как создать пользовательский мета-бокс в WordPress. Когда вы редактирует свой пост, страница состоит из множества мета-боксов по умолчанию, такие как: редактор, изображение записи, опубликовать, рубрики, теги и т.д. Эти мета-боксы находятся на правой стороне экрана редактирования.
Вы можете создавать свои собственные мета-боксы, путем добавления нескольких кодов в файл function.php вашей темы в WordPress или можете создать отдельный плагин для этого. Ниже примеры демонстрируют шаги, как создать пользовательские мета-боксы.
Как создать мета-бокс
Добавьте ниже крюк в add_meta_boxes действие и сделать вызов add_meta_box().
/* Добавить метабокс на экран редактирования поста */
add_action( 'add_meta_boxes', 'andreyex_add_custom_box' );
function andreyex_add_custom_box() {
$screens = array( 'post', 'my_cpt' );
foreach ( $screens as $screen ) {
add_meta_box(
'andreyex_box_id', // Unique ID
'Пользовательский заголовок метабокса', // Заголовок мета-бокса
'andreyex_inner_custom_box', // Content callback
$screen // тип поста
);
}
}
Создание формы мета-бокса
Ниже код будет создать форму для пользовательского meta box. Пожалуйста, измените приведенный ниже код согласно вашему требованию.
/* Печать содержимого бокса */
function andreyex_inner_custom_box( $post ) {
?>
<label for="andreyex_field"> Описание для этой области </label>
<select name="andreyex_field" id="andreyex_field" class="postbox">
<option value="">Выберите что-то…</option>
<option value="something">Что-то</option>
<option value="else">Иначе</option>
</select>
<?php
}
?>
Сохранение значений мета-полей
Добавьте код, приведенный ниже, чтобы сохранить данные формы в базе данных, соответствующих текущему посту.
add_action( 'save_post', 'andreyex_save_postdata' );
function andreyex_save_postdata( $post_id ) {
if ( array_key_exists('andreyex_field', $_POST ) ) {
update_post_meta( $post_id,
'_my_meta_value_key',
$_POST['andreyex_field']
);
}
}
Получение значений мета-полей
Отображение мета значения в боксе из базы данных на экране редактирования поста.
<?php $value = get_post_meta( $post->ID, '_my_meta_value_key', true ); ?>
<select name="andreyex_field" id="andreyex_field" class="postbox">
<option value="">Выберите что-то…</option>
<option value="something" <?php if ( 'something' == $value ) echo 'selected'; ?>>Что-то</option>
<option value="else" <?php if ( 'else' == $value ) echo 'selected'; ?>>Иначе</option>
</select>
Как удалить Meta Boxes
Если вы хотите удалить мета-бокс по умолчанию из экрана редактирования поста, используйте remove_meta_box() для этого.
Редактор: AndreyEx