document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. function add_restricting_access_meta_boxes( $post_type ) {
  2.     $post_types = array(\'post\', \'page\'); // Типы постов, к которым будет добавлен блок
  3.     if(in_array( $post_type, $post_types )) {
  4.         add_meta_box(
  5.             \'restricting_access\'
  6.             ,\'Ограничение доступа\'
  7.             ,\'render_restricting_access_meta_box\' // Функция, которая выводит на экран HTML содержание блока
  8.             ,$post_type
  9.             ,\'side\'
  10.             ,\'low\'
  11.         );
  12.     }
  13. }
  14. add_action( \'add_meta_boxes\', \'add_restricting_access_meta_boxes\'); // Регистрируем хук-событие отображения
  15.  
  16. function save_restricting_access_post( $post_id ) {
  17.     // Проверяем установлен ли nonce.
  18.     if ( ! isset( $_POST[\'restricting_access_inner_custom_box_nonce\'] ) )
  19.         return $post_id;
  20.  
  21.     $nonce = $_POST[\'restricting_access_inner_custom_box_nonce\'];
  22.  
  23.     // Проверяем корректен ли nonce.
  24.     if ( ! wp_verify_nonce( $nonce, \'restricting_access_inner_custom_box\' ) )
  25.         return $post_id;
  26.  
  27.     // Если это автосохранение ничего не делаем.
  28.     if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
  29.         return $post_id;
  30.  
  31.     // Проверяем права пользователя.
  32.     if ( \'page\' == $_POST[\'post_type\'] ) {
  33.         if ( ! current_user_can( \'edit_page\', $post_id ) )
  34.             return $post_id;
  35.     } else {
  36.         if ( ! current_user_can( \'edit_post\', $post_id ) )
  37.             return $post_id;
  38.     }
  39.  
  40.     $data = is_array($_POST[\'meta_field_restricting_access\'])?$_POST[\'meta_field_restricting_access\']:array();
  41.  
  42.     // Обновляем данные.
  43.     update_post_meta( $post_id, \'meta_restricting_access\', $data );
  44. }
  45. add_action( \'save_post\', \'save_restricting_access_post\'); // Регистрируем хук-событие сохранения
  46.  
  47. function render_restricting_access_meta_box( $post ) {
  48.     // Добавляем nonce поле, которое будем проверять при сохранении.
  49.     wp_nonce_field( \'restricting_access_inner_custom_box\', \'restricting_access_inner_custom_box_nonce\' );
  50.  
  51.     // Получаем существующие данные из базы данных.
  52.     $value = get_post_meta( $post->ID, \'meta_restricting_access\' );
  53.  
  54.     // Формируем список ролей.
  55.     $html = \'<div id="meta_restricting_access">\';
  56.     global $wp_roles;
  57.     if (!isset($wp_roles)) $wp_roles = new WP_Roles();
  58.     foreach($wp_roles->get_names() as $key=>$name) {
  59.         $checked = in_array($key,$value[0])?\'checked\':\'\';
  60.         $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 />\';
  61.     }
  62.     $html .= \'</div>\';
  63.    
  64.     // Добавляем кнопку быстрого переключения чекбоксов.
  65.     $html .= \'
  66.    <br/><a href="#" id="meta_restricting_access_switch">Переключить</a>
  67.    <script>
  68.        jQuery(document).ready( function() {
  69.           jQuery("#meta_restricting_access_switch").on("click", function() {
  70.            jQuery("#meta_restricting_access input").click();
  71.            return false;
  72.           });
  73.        });
  74.    </script>
  75.    \';
  76.     echo $html;
  77. }
');