我想限制特定用户只使用一个插件。我不希望他看到 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;
}
}
}
}