Hide pages depending on role

I’ve been trying to find a way to limit the user from seeing some pages in the “pages” menu in the admin panel.

I looked in the edit.php file and noticed:

Read More
} elseif ( 'page' == $post_type ) {

However, i am unsure of what i need to edit in order to show some pages and hide others depending on the role.

The Admin will be able to see all posts.

The SubAdmin will only be able to see some pages.

How can i edit the edit.php file (or some other php file) in order to do this?

Related posts

1 comment

  1. To get the current role of the user

    $current_user = wp_get_current_user();
    if ( !($current_user instanceof WP_User) )
       return;
    $roles = $current_user->roles;  //$roles is an array
    

    After getting role set page ids which you want to show according to roles (for example)

        if($roles=='administrator'){
         $args=array('21','22','23');
        }
    
       or
    
       if($roles=='subscriber'){
         $args=array('24','25','26');
        }
    

    you can use parse_query filter hook to exclude your pages using post__not_in attribute

    add_filter( 'parse_query', 'exclude_pages_from_admin' );
    function exclude_pages_from_admin($query) {
        global $pagenow,$post_type;
        if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
            $query->query_vars['post__not_in'] = $args
        }
    }
    

    Important Links:

Comments are closed.