Problems with removing admin bar

I am trying to remove the admin bar from a theme front end of a theme.

I found the following code block:

Read More
add_filter( 'show_admin_bar', '__return_false' );
remove_action( 'personal_options', '_admin_bar_preferences' );

Which works fine. However I wanted to add a choice for the user, so that I can add a permanent code block to my boilerplate theme, and allow users to toggle the admin bar off and on.

I have successfully added the toggle in the admin area, and called back the value successfully, however, when I test for the value in order to control the callback of the admin bar, the admin bar goes, but the CSS applied to the HTML element (margin-top: 28px !important;) remains, leaving a 28px gap in the top of my theme.

Here is the code block I am using to call the value back, and respond accordingly:

function block_admin(){
    $show = get_option('admin_bar_');
    $show = $show['admin_bar_toggle'];
    if (!$show || $show != 'on'){
        add_filter( 'show_admin_bar', '__return_false' );
        remove_action( 'personal_options', '_admin_bar_preferences' );
    } 
}
add_action('init', 'block_admin');

Suggestion

By requirement, my custom option (using register_setting) is not initialised until the admin_menu hook is launched, whilst the block_admin is launched on init. However, I don’t think this is the issue as I don’t think get_option is dependent on the setting being registered, but rather the option existing (or not) in the database.

Related posts

Leave a Reply

5 comments

  1. There is already an per-user-option to disable the admin-bar in the latest WordPress versions. It can be found in the user profile settings:

    …/wp-admin/profile.php (click on your name after logging in)

  2. Just launching the function at an earlier point solved the issue

     function block_admin(){
        $show = get_option('admin_bar_');
        $show = $show['admin_bar_toggle'];
        fb::log($show,'shoe');
        if (!$show || $show != 'on'){
            add_filter( 'show_admin_bar', '__return_false' );
            remove_action( 'personal_options', '_admin_bar_preferences' );
        } 
    }
    add_action('after_setup_theme','block_admin');
    
  3. Have you saved your settings, so that they do exist in the database?

    Also: what if you change this:

    if ( ! $show || $show != 'on' ) {
    

    …to this:

    if ( ! isset( $show ) || $show != 'on' ) {