当我运行WP 3.9.2时,我能够使用以下代码从管理菜单中的外观中删除自定义菜单项.
function remove_customize() {
remove_submenu_page('themes.php', 'customize.php');
}
add_action('admin_init', 'remove_customize', 999);
Run Code Online (Sandbox Code Playgroud)
一旦我更新到4.0,这将不再有效.
Ov3*_*fly 17
这适用于WordPress 4.1和4.0以及3.x:
编辑:调整WordPress 4.1兼容性:
function remove_customize() {
$customize_url_arr = array();
$customize_url_arr[] = 'customize.php'; // 3.x
$customize_url = add_query_arg( 'return', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'customize.php' );
$customize_url_arr[] = $customize_url; // 4.0 & 4.1
if ( current_theme_supports( 'custom-header' ) && current_user_can( 'customize') ) {
$customize_url_arr[] = add_query_arg( 'autofocus[control]', 'header_image', $customize_url ); // 4.1
$customize_url_arr[] = 'custom-header'; // 4.0
}
if ( current_theme_supports( 'custom-background' ) && current_user_can( 'customize') ) {
$customize_url_arr[] = add_query_arg( 'autofocus[control]', 'background_image', $customize_url ); // 4.1
$customize_url_arr[] = 'custom-background'; // 4.0
}
foreach ( $customize_url_arr as $customize_url ) {
remove_submenu_page( 'themes.php', $customize_url );
}
}
add_action( 'admin_menu', 'remove_customize', 999 );
Run Code Online (Sandbox Code Playgroud)
小智 10
答案应该是:
add_action( 'admin_menu', function () {
global $submenu;
if ( isset( $submenu[ 'themes.php' ] ) ) {
foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
foreach ($menu_item as $value) {
if (strpos($value,'customize') !== false) {
unset( $submenu[ 'themes.php' ][ $index ] );
}
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
rjb在接受的答案中使用数组作为in_array()中的指针的方式不起作用.查看文档中的原因.我将in_array替换为循环遍历$ menu_item数组的另一个foreach,并查找'customize'作为值的一部分.
使用WordPress 4.9.6为我工作
小智 8
你可以$submenus像这样直接修改全局:
global $submenu;
unset($submenu['themes.php'][6]); // Customize link
Run Code Online (Sandbox Code Playgroud)
我在同一个函数中使用它,挂钩admin_menu,因为我用来取消设置其他管理项目,它似乎工作正常
function as_remove_menus () {
remove_menu_page('upload.php'); //hide Media
remove_menu_page('link-manager.php'); //hide links
remove_submenu_page( 'edit.php', 'edit-tags.php' ); //hide tags
global $submenu;
// Appearance Menu
unset($submenu['themes.php'][6]); // Customize
}
add_action('admin_menu', 'as_remove_menus');
Run Code Online (Sandbox Code Playgroud)
实际上,您可以使用remove_submenu_page从管理屏幕中删除主题子菜单选项.诀窍在于,url必须与管理中与该功能完全链接的内容相匹配才能工作.
function remove_admin_menus() {
remove_submenu_page(
'themes.php',
'customize.php?return=' .
urlencode( str_replace( get_bloginfo('url'), "", get_admin_url() ) ) .
'themes.php' );
}
add_action( 'admin_init', 'remove_admin_menus' );
Run Code Online (Sandbox Code Playgroud)
在您不是简单地使用'/ wp-admin'的情况下,我已经以编程方式确定了管理URL.@isabisa如果菜单项的索引发生变化,这也将避免将来破坏.
我在WP 4.0中使用它,效果很好!
编辑:针对 WordPress 4.9+ 更新并增加了与 PHP <= 5.4 的兼容性
WordPress 核心不提供本地禁用主题定制器的钩子,但是有一种巧妙而优雅的方法可以通过更改全局$submenu变量从外观菜单中删除“自定义”链接:
/**
* Remove Admin Menu Link to Theme Customizer
*/
add_action( 'admin_menu', function () {
global $submenu;
if ( isset( $submenu[ 'themes.php' ] ) ) {
foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
if ( in_array( array( 'Customize', 'Customizer', 'customize' ), $menu_item ) ) {
unset( $submenu[ 'themes.php' ][ $index ] );
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
虽然此处和其他地方的其他代码示例不负责任地依赖全局$submenu变量的特定数字索引(例如$submenu['themes.php'][6][0],...),但此方法智能地遍历层次结构,因此它应该与旧 (3.x) 和更新版本的WordPress (4.x) 类似。
删除菜单只是一个半途而废的解决方案,因为它并没有完全禁用定制器。为了完全、安全地禁用定制器(并删除菜单),您需要删除所有用户的定制器权限。像这样的事情会做到这一点:
add_filter('map_meta_cap', function($caps, $cap, $user_id, $args) {
if ('customize' == $cap) return ['do_not_allow'];
return $caps;
}, 10, 4);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16540 次 |
| 最近记录: |