2
votes

I am trying to remove the ability to change the 'site icon' in a Wordpress site unless the user is a 'Super Admin'.

Remove whats in the red box

My first thought was trying to modify this code snippet here that is located in the **/wp-includes/class-wp-customize-manager.php

        $this->add_setting( 'site_icon', array(
        'type'       => 'option',
        'capability' => 'manage_options',
        'transport'  => 'postMessage', // Previewed with JS in the Customizer controls window.
    ) );

    $this->add_control( new WP_Customize_Site_Icon_Control( $this, 'site_icon', array(
        'label'       => __( 'Site Icon' ),
        'description' => sprintf(
            /* translators: %s: site icon size in pixels */
            __( 'The Site Icon is used as a browser and app icon for your site. Icons must be square, and at least %s pixels wide and tall.' ),
            '<strong>512</strong>'
        ),
        'section'     => 'title_tagline',
        'priority'    => 60,
        'height'      => 512,
        'width'       => 512,
    ) ) );

But I do not want to change any core/delivered files. Is there any other way to accomplish this? Maybe in the theme's functions.php file?

Also, I'm currently using WordPress 4.5.2 and the twentytwelve theme.

2

2 Answers

5
votes
function remove_styles_sections($wp_customize) {
    $wp_customize->remove_control('site_icon');
}
add_action( 'customize_register', 'remove_styles_sections', 20, 1 );  
0
votes

This is what I did in order to do remove the Site Icon functionality.

if( !is_super_admin( get_current_user_id()) ){
function remove_styles_sections(){
    global $wp_customize;
    $wp_customize->remove_control('site_icon');

}

// Priority 20 so that we remove options only once they've been added
add_action( 'customize_register', 'remove_styles_sections', 20 );}