В этом посте я объясню, как создать пользовательский мета-бокс в 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>
Если вы хотите удалить мета-бокс по умолчанию из экрана редактирования поста, используйте remove_meta_box()
для этого.