<?php
function my_meta_box() {
add_meta_box(
'my_meta_box', // Идентификатор(id)
'Настройки записи', // Заголовок области с мета-полями(title)
'show_my_metabox', // Вызов(callback)
'post', // Где будет отображаться наше поле, в нашем случае в Записях
'normal',
'high');
}
add_action('add_meta_boxes', 'my_meta_box'); // Запускаем функцию
$meta_fields = array(
array(
'label' => 'Первый',
//'desc' => '48 - 50 RUS',
'id' => 'One',
'type' => 'checkbox', // Указываем тип поля.
'value' => array ('One', 'Two', 'Three')
),
array(
'label' => 'Второй',
'id' => 'Two',
'type' => 'checkbox', // Указываем тип поля.
'value' => array ('One', 'Two', 'Three')
)
);
// Вызов метаполей
function show_my_metabox() {
global $meta_fields; // Обозначим наш массив с полями глобальным
global $post; // Глобальный $post для получения id создаваемого/редактируемого поста
// Выводим скрытый input, для верификации. Безопасность прежде всего!
echo '<input type="hidden" name="custom_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';
// Начинаем выводить таблицу с полями через цикл
echo '<table class="form-table">';
foreach ($meta_fields as $field) {
// Получаем значение если оно есть для этого поля
$meta = get_post_meta($post->ID, $field['id'], true);
// Начинаем выводить таблицу
echo '<tr>
<th><label for="'.$field['id'].'">'.$field['label'].'</label></th>
<td>';
switch($field['type']) {
// Первый
case 'checkbox':
foreach ($field['value'] as $value){
echo '<input type="checkbox" name="One[]" value="'.$value.'" id="One['.$value.']" ';
// ini_set( 'display_errors', 'Off' );
foreach($meta as $val){
if ($val == $value)
echo ' checked="checked";} />';}
echo '<label for="One['.$value.']">'.$value.'</label>';
} break;
// Второй
case 'checkbox':
foreach ($field['value'] as $value){
echo '<input type="checkbox" name="One[]" value="'.$value.'" id="testing['.$value.']" ';
ini_set( 'display_errors', 'Off' );
foreach($meta as $val){
if ($val == $value)
echo ' checked="checked";} />';}
echo '<label for="One['.$value.']">'.$value.'</label>';
} break;
}
}
echo '</table>';
}
// Пишем функцию для сохранения
function save_my_meta_fields($post_id) {
global $meta_fields; // Массив с нашими полями
// проверяем наш проверочный код
if (!wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__)))
return $post_id;
// Проверяем авто-сохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return $post_id;
// Проверяем права доступа
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id))
return $post_id;
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
// Если все отлично, прогоняем массив через foreach
foreach ($meta_fields as $field) {
$old = get_post_meta($post_id, $field['id'], true); // Получаем старые данные (если они есть), для сверки
$new = $_POST[$field['id']];
if ($new && $new != $old) { // Если данные новые
update_post_meta($post_id, $field['id'], $new); // Обновляем данные
} elseif ('' == $new && $old) {
delete_post_meta($post_id, $field['id'], $old); // Если данных нету, удаляем мету.
}
} // end foreach
}
add_action('save_post', 'save_my_meta_fields'); // Запускаем функцию сохранения
?>