如何从管理菜单中删除/隐藏元素?

时间:2013-11-06 作者:Richard the Lionheart

我想躲起来PagesComments 来自编辑器。

我试图用我的自定义类型“menu\\u position”覆盖它们,但在WordPress 3.7.1 再也没有了。

我找到了另一种方法:从admin menu 通过更改菜单顺序上的全局变量filter. 不幸的是,它在菜单中产生错误。php:array\\u flip()传递一个null。

我猜WordPress假设默认值仍然存在。

有什么方法可以过滤菜单条目吗when 他们是rendered?更好的是:有没有办法设置default post 键入公共选项false?

class RemoveAdminMenuItems {

/**
 * List of values used for key identification
 * 
 * @var array
 */
public $remove_keys = array();

/**
 * List of values used for key identification. Identified keys will be removed.
 * 
 * @param array $remove_keys
 */
public function __construct($remove_keys)
{

    $this->remove_keys = $remove_keys;

    add_filter( \'custom_menu_order\', \'__return_true\' );
    add_filter( \'menu_order\', array($this, \'reconstruct_menu\'));

}

/**
 * Method modifies the admin menu before it gets rendered.
 * 
 * @global array $menu
 */
public function reconstruct_menu() {

    global $menu;

    foreach ($menu as $menu_key => $menu_value) {
        foreach ($this->remove_keys as $remove_key) {
            $key = array_search($remove_key, $menu_value);
            if ($key) {
                unset($menu[$menu_key]);
            }        
        }
    }

}

 }

1 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

如果您只想隐藏菜单项,可以按如下所示进行操作。不要忘记管理栏中的条目。

Code:

//hide in admin menu
add_action( \'admin_menu\', \'wpse121406_hide_pages_comments_m\' );
function wpse121406_hide_pages_comments_m() {
    remove_menu_page(\'edit.php?post_type=page\');
    remove_menu_page( \'edit-comments.php\' );
}

//hide in admin bar
add_action( \'wp_before_admin_bar_render\', \'wpse121406_hide_pages_comments_b\' );
function wpse121406_hide_pages_comments_b() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu(\'new-page\');
    $wp_admin_bar->remove_menu(\'comments\');
}
But 您必须记住,这不会禁用/限制功能。通过在位置栏中键入地址,仍然可以访问编辑页面和评论页面。如果要按用户类型限制访问,则必须使用Roles and Capabilities.

<小时>

Update:

关于第二个问题,关于如何更改内置的post类型属性。您可以通过如下所示的方式实现这一点。您可以使用registered_post_type 或者init 挂钩,可以使用get_post_type_object() 或全球$wp_post_types.

Code:

add_action(\'init\',\'wpse121406_alter_post_type_object\');
function wpse121406_alter_post_type_object() {
  $object = get_post_type_object(\'page\');
  $object->public = false;
}

结束

相关推荐