function add_restricting_access_meta_boxes( $post_type ) {
$post_types = array(\'post\', \'page\'); // Типы постов, к которым будет добавлен блок
if(in_array( $post_type, $post_types )) {
add_meta_box(
\'restricting_access\'
,\'Ограничение доступа\'
,\'render_restricting_access_meta_box\' // Функция, которая выводит на экран HTML содержание блока
,$post_type
,\'side\'
,\'low\'
);
}
}
add_action( \'add_meta_boxes\', \'add_restricting_access_meta_boxes\'); // Регистрируем хук-событие отображения
function save_restricting_access_post( $post_id ) {
// Проверяем установлен ли nonce.
if ( ! isset( $_POST[\'restricting_access_inner_custom_box_nonce\'] ) )
return $post_id;
$nonce = $_POST[\'restricting_access_inner_custom_box_nonce\'];
// Проверяем корректен ли nonce.
if ( ! wp_verify_nonce( $nonce, \'restricting_access_inner_custom_box\' ) )
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;
} else {
if ( ! current_user_can( \'edit_post\', $post_id ) )
return $post_id;
}
$data = is_array($_POST[\'meta_field_restricting_access\'])?$_POST[\'meta_field_restricting_access\']:array();
// Обновляем данные.
update_post_meta( $post_id, \'meta_restricting_access\', $data );
}
add_action( \'save_post\', \'save_restricting_access_post\'); // Регистрируем хук-событие сохранения
function render_restricting_access_meta_box( $post ) {
// Добавляем nonce поле, которое будем проверять при сохранении.
wp_nonce_field( \'restricting_access_inner_custom_box\', \'restricting_access_inner_custom_box_nonce\' );
// Получаем существующие данные из базы данных.
$value = get_post_meta( $post->ID, \'meta_restricting_access\' );
// Формируем список ролей.
$html = \'<div id="meta_restricting_access">\';
global $wp_roles;
if (!isset($wp_roles)) $wp_roles = new WP_Roles();
foreach($wp_roles->get_names() as $key=>$name) {
$checked = in_array($key,$value[0])?\'checked\':\'\';
$html .= \'<label for="meta_field_restricting_access_\'.$key.\'"><input type="checkbox" id="meta_field_restricting_access_\'.$key.\'" name="meta_field_restricting_access[]" value="\'.$key.\'" \'.$checked.\' />\'.$name.\'</label><br />\';
}
$html .= \'</div>\';
// Добавляем кнопку быстрого переключения чекбоксов.
$html .= \'
<br/><a href="#" id="meta_restricting_access_switch">Переключить</a>
<script>
jQuery(document).ready( function() {
jQuery("#meta_restricting_access_switch").on("click", function() {
jQuery("#meta_restricting_access input").click();
return false;
});
});
</script>
\';
echo $html;
}