Поддержка Плагины Как запретить отображ. виджета в адменке всем кроме ад

  • Написал пример плагина, который отображает в админке на странице редактирования поста виджет:

    <?php
    /*
    Plugin Name: поле
    Version: 1.2
    Plugin URI: http://a.ru/
    Description: Плагин для простого добовления поля.
    Author: Alex
    Author URI: http://a.ru/
    */ 
    
    //выводим поле
    add_action('admin_menu', 'FieldMetaBox'); 
    
    function FieldMetaBox() {
       if(function_exists('add_meta_box')){
          add_meta_box('field','Поле','FieldMeta','post');
       }
    } 
    
    //Вывод в редакторе
    function FieldMeta(){
       global $post;
       $dir=substr(__FILE__,0,strpos(__FILE__,'field.php')); 
    
       $pole=get_post_meta($post->ID,'pole',true); 
    
       ?> 
    
       <br /><b>Поле:</b><br><textarea><?=$pole?></textarea><br /> 
    
    <?
    } 
    
    ?>

    Вопрос: Как научить данный плагин отображать виджет только для администратора, а для всех остальных пользователей его скрыть?

    Пробовал функцию is_admin() че-то ничего не получилось…

    нашел еще кусок кода, который по уровню пользователя допускает к отображению (такой подход даже более желателен), но не знаю как его вклеить в основной код плагина:

    function customize_meta_boxes() {
    //retrieve current user info
    global $current_user;
    get_currentuserinfo(); 
    
    //if current user level is less than 3, remove the postcustom meta box
    if ($current_user->user_level < 3)
    remove_meta_box('postcustom','post','normal');
    }
    add_action('admin_init','customize_meta_boxes');

    помогите реализацией

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Как вариант:

    function FieldMetaBox() {
       if(current_user_can('manage_options'){
          add_meta_box('field','Поле','FieldMeta','post');
       }
    }

    Думаю, проверку function_exists('add_meta_box'), можно не делать, поскольку эта функция существует с версии 2.5.

    собрал на основе рекомендации. вот, что получилось:

    <?php
    /*
    Plugin Name: поле
    Version: 1.2
    Plugin URI: http://a.ru/
    Description: Плагин для простого добовления поля.
    Author: Alex
    Author URI: http://a.ru/
    */
    
    //выводим поле
    add_action('admin_menu', 'FieldMetaBox');
    
    function FieldMetaBox() {
       if(current_user_can('level_10'){
          add_meta_box('field','Поле','FieldMeta','post');
       }
    }
    
    //Вывод в редакторе
    function FieldMeta(){
    	global $post;
    	$dir=substr(__FILE__,0,strpos(__FILE__,'field.php'));
    
    	$pole=get_post_meta($post->ID,'pole',true);
    
    	?>
    
    	<br /><b>Поле:</b><br><textarea><?=$pole?></textarea><br />
    
    <?
    }
    
    ?>

    При активации плагин выдает ошибку:

    Плагин не был активирован, потому что он вызвал фатальную ошибку.

    Parse error: syntax error, unexpected ‘{‘ in /var/www/vhosts/a.ru/httpdocs/wp-content/plugins/field.php on line 16

    Что не так?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. В строке if(current_user_can('level_10'){ не хватает скобки.
    2. Использование уровней считается устаревшим. Лучше проверять права на конкретную возможность (например, manage_options для администратора).

    Сергей, спасибо огромное, и за ссылку в т.ч. Со всем разобрался и с новыми правами тоже!

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Как запретить отображ. виджета в адменке всем кроме ад» закрыта для новых ответов.