当我运行WP 3.9.2时,我能够使用以下代码从管理菜单中的外观中删除自定义菜单项。
function remove_customize() {
remove_submenu_page('themes.php', 'customize.php');
}
add_action('admin_init', 'remove_customize', 999);
一旦我更新到4.0,这将不再有效。
答案 0 :(得分: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 );
答案 1 :(得分:8)
您可以像这样直接修改$submenus
全局:
global $submenu;
unset($submenu['themes.php'][6]); // Customize link
我在同一个函数中使用它,连接到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');
答案 2 :(得分:8)
答案应该是:
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 ] );
}
}
}
}
});
rjb在接受的答案中使用数组作为in_array()中的指针的方式并不起作用。看看为什么in the docs。我将in_array替换为循环遍历$ menu_item数组的另一个foreach,并查找' customize'作为价值的一部分。
使用WordPress 4.9.6
为我工作答案 3 :(得分:6)
您实际上可以使用remove_submenu_page
从管理界面中删除主题子菜单选项。诀窍在于,网址必须与管理中与该功能完全相关的内容相匹配。
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' );
如果您不是简单地使用'/ wp-admin',我已经以编程方式确定了管理网址。 @isabisa如果菜单项的索引发生变化,这也将避免将来破坏。
我在WP 4.0中使用它,效果很好!
答案 4 :(得分:2)
编辑:针对WordPress 4.9+进行了更新,并提高了与PHP< = 5.4
的兼容性
WordPress核心不提供原生disable the theme customizer的钩子,但是一种聪明而优雅的方式通过改变全局{从外观菜单中删除“自定义”链接{ {1}}变量:
$submenu
虽然此处和其他地方的其他代码示例不负责任地依赖于全局 $ 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 ] );
}
}
}
});
,...),但此方法会智能地遍历层次结构,因此它应与旧的(3.x)和更新版本的WordPress(4.x)兼容。
答案 5 :(得分:1)
@rjb接受的答案并不适用于我的西班牙语单词,但只需将Customize
更改为customize
即可。
/**
* 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( 'customize', $menu_item ) ) {
unset( $submenu[ 'themes.php' ][ $index ] );
}
}
}
});
答案 6 :(得分:1)
WordPress> = 4.9.8
add_action('admin_menu', function () {
$request = urlencode($_SERVER['REQUEST_URI']);
remove_submenu_page('themes.php', 'customize.php?return='. $request);
}, 999);
答案 7 :(得分:0)
尝试更改' admin_init'在' admin_menu'
答案 8 :(得分:0)
删除菜单只是中途解决方案,因为它不能完全禁用定制程序。为了完全安全地禁用定制器(并删除菜单),您需要从所有用户中删除定制器权限。这样的事情会做到这一点:
add_filter('map_meta_cap', function($caps, $cap, $user_id, $args) {
if ('customize' == $cap) return ['do_not_allow'];
return $caps;
}, 10, 4);
答案 9 :(得分:0)
@bash88 answer和@Emanuel A. answer可以使用,但是如果您还希望从主题页面上删除按钮(蓝色的自定义按钮),答案应该是:
经过测试的WordPress 5.0.3
/**
* Remove customize links from admin panel.
*/
function admin_remove_customize_links() {
echo '<style>.hide-if-no-customize { display: none !important; }</style>';
}
add_action( 'admin_head', 'admin_remove_customize_links' );
答案 10 :(得分:0)
适用于Wordpres 5。*
从Wordpress Admin中删除自定义项,您还需要从侧边栏和前端的顶部栏中删除
从侧边栏菜单
add_action( 'admin_menu', 'remove_customize' );
function remove_customize() {
global $submenu;
if ( isset( $submenu[ 'themes.php' ] ) ) {
foreach ( $submenu[ 'themes.php' ] as $index => $menu_item ) {
if(in_array('Customize', $menu_item) || in_array('Customizer', $menu_item) || in_array('customize', $menu_item))
{
unset( $submenu[ 'themes.php' ][ $index ] );
}
}
}
}
从顶部(在前端)的管理栏中
add_action( 'admin_bar_menu', 'remove_customize_menu_bar', 999 );
function remove_customize_menu_bar( $wp_admin_bar ) {
$wp_admin_bar->remove_node( 'customize' );
}
这将完全禁用自定义选项:)
答案 11 :(得分:0)
add_action( 'admin_menu', function() {
remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode($_SERVER['SCRIPT_NAME']));
}, 999 )
答案 12 :(得分:0)
add_action( 'admin_menu', 'rompiot_remove_customize' );
/**
* Remove Admin Menu Link to Theme Customizer
*/
public function rompiot_remove_customize()
{
global $submenu;
if (isset($submenu['themes.php'])) {
foreach ($submenu['themes.php'] as $index => $array_menu_item) {
foreach ($array_menu_item as $key => $menu_item) {
if (in_array($menu_item, ['Customize', 'Customizer', 'customize'])) {
unset($submenu['themes.php'][$index]);
}
}
}
}
}