删除子菜单页面" customize.php"在WordPress 4.0中

时间:2014-09-11 13:17:11

标签: wordpress

当我运行WP 3.9.2时,我能够使用以下代码从管理菜单中的外观中删除自定义菜单项。

function remove_customize() {
  remove_submenu_page('themes.php', 'customize.php');
}
add_action('admin_init', 'remove_customize', 999);

一旦我更新到4.0,这将不再有效。

13 个答案:

答案 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)

对于WordPress 5

add_action( 'admin_menu', function() {
    remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode($_SERVER['SCRIPT_NAME']));
}, 999 )

答案 12 :(得分:0)

更新批准的回复(Wordpress 5)

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

        }
    }
}