How to restrict a user to use only one plugin in WordPress

446 views Asked by At

I want to restrict a specific user to use only one plugin. I don't want him to see any other pages on the WordPress admin dashboard like the Plugins page, Posts, or other pages. I want to show him just one link in the admin dashboard and let him to use just that page.

I want to do it programmatically and don't want to use a plugin for it.

I implemented the same functionality to restrict users by the code below but I want to know is there any better solution for it or not. It redirect user to '/wp-admin/edit.php?post_type=product' if he doesn't visit the valid pages that I declared in $pages array. I'm using WooCommerce, the post_type=product is for that.

Could you help me to achieve this, please? Thank you.

The code I wrote in functions.php file before to achieve this, the issue if I have to set all pages and plugins ID manually:

add_action('current_screen', 'checkUserPermissionsInThisScreen');

function checkUserPermissionsInThisScreen(){

    if (is_admin()){

      $a = get_current_screen();
      $currentUserName = wp_get_current_user()->user_login;

      if ($currentUserName === "testuser") {

         $pages = array(
          'dashboard',
          'toplevel_page_wpcf7',
          'contact_page_wpcf7-new',
          'contact_page_wpcf7-integration',
          'edit-shop_order',
          'edit-shop_coupon',
          'woocommerce_page_dgwt_wcas_settings',
          'woocommerce_page_wc-reports',
          'woocommerce_page_wc-settings',
          'woocommerce_page_wc-status',
          'woocommerce_page_wc-addons', 
          'woocommerce_page_alg-wc-renumerate-orders-tools',
          'themes',
          'customize',
          'users',
          'tools',
          'import',
          'export',
          'site-health',
          'export-personal-data',
          'erase-personal-data',
          'tools_page_action-scheduler',
          'options-general',
          'options-writing',
          'options-reading',
          'options-discussion',
          'options-media',
          'options-permalink',
          'options-privacy',
          'toplevel_page_agilewc',
          'toplevel_page_smush',
          'shop_order'
        );


        remove_menu_page( 'themes.php' ); 
        remove_menu_page( 'woocommerce' );
        remove_menu_page( 'wpcf7' );
        remove_menu_page( 'index.php' );
        remove_menu_page( 'edit-comments.php' );
        remove_menu_page( 'users.php' );
        remove_menu_page( 'tools.php' );
        remove_menu_page( 'options-general.php' );
        remove_menu_page( 'smush' );

        //Remove the "WooCommerce Recent Reviews" widget.
        remove_meta_box('woocommerce_dashboard_recent_reviews', 'dashboard', 'normal');
        //Remove the "WooCommerce Status" widget.
        remove_meta_box('woocommerce_dashboard_status', 'dashboard', 'normal');
        //Hide the "Coupon data" meta box.
        remove_meta_box('woocommerce-coupon-data', $a->id, 'normal');
        //Hide the "Order data" meta box.
        remove_meta_box('woocommerce-order-data', $a->id, 'normal');
        //Hide the "Items" meta box.
        remove_meta_box('woocommerce-order-items', $a->id, 'normal');
        //Hide the "Downloadable product permissions" meta box.
        remove_meta_box('woocommerce-order-downloads', $a->id, 'normal');
        //Hide the "Order actions" meta box.
        remove_meta_box('woocommerce-order-actions', $a->id, 'side');
        //Hide the "Order notes" meta box.
        remove_meta_box('woocommerce-order-notes', $a->id, 'side');

      } 

        global $pagenow;

        if ( ( ! in_array($a->id, $pages) || $pagenow === 'post-new.php' ) ) {
          wp_redirect(get_site_url() . "/wp-admin/edit.php?post_type=product");
          die;
        } 
        
      }


    }
}
0

There are 0 answers