0

我想限制特定用户只使用一个插件。我不希望他看到 WordPress 管理仪表板上的任何其他页面,例如插件页面、帖子或其他页面。我只想在管理仪表板中向他显示​​一个链接,并让他只使用该页面。

我想以编程方式完成,不想使用插件。

我通过下面的代码实现了相同的功能来限制用户,但我想知道是否有更好的解决方案。如果用户没有访问我在 $pages 数组中声明的有效页面,它会将用户重定向到“/wp-admin/edit.php?post_type=product”。我正在使用 WooCommerce, post_type=product 就是为此。

你能帮我实现这个吗?谢谢你。

我之前在functions.php文件中编写的代码来实现这一点,如果我必须手动设置所有页面和插件ID的问题:

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;
        } 
        
      }


    }
}
4

0 回答 0