2

I have been attempting to disable the ability to collapse admin meta boxes. By the looks of it WordPress creates this functionality in postbox.js /wp-admin/js/ but I have been unable to find a hook or suitable JavaScript to overwrite the built in functions.

This is a some test code I am working with:

jQuery('.postbox h3, .postbox .handlediv, .hndle').bind('click', function(e) {

    e.preventDefault();
    return false;

});

Any thoughts on how this could be achieved?

3 Answers 3

4

Add this to your functions file and it will kill the metabox toggles:

function kill_postbox(){
    global $wp_scripts;
    $footer_scripts = $wp_scripts->in_footer;
    foreach($footer_scripts as $key => $script){
        if('postbox' === $script)
            unset($wp_scripts->in_footer[$key]);
    }
}
add_action('admin_footer', 'kill_postbox', 1);
4
  • Thanks Brian. That seems to the trick nicely. Do you know if removing the entire 'postbox' script in this way causes other issues?
    – Scott
    Commented Oct 25, 2011 at 9:12
  • It does affect user column preferences and the sortable metaboxes. You could clone postbox-dev.js and remove the toggle features, place it in your theme js folder and enqueue your hacked version with a dependency on 'jquery-ui-sortable'. This would preserve those other functions. Commented Oct 25, 2011 at 9:23
  • Thanks Brian. Luckily I do not need the sorting either so this is a silver bullet!
    – Scott
    Commented Oct 25, 2011 at 10:36
  • 1
    Doesn't seem to work (any more), postbox is removed from the in_footer array, but is loaded nonetheless. Found a working solution here, which neatly unbinds the click-handler, and leaves all other postbox functionality in place.
    – ptriek
    Commented Nov 13, 2013 at 12:59
1

For current Wordpress version (4.5.3) I come up with the following solution which removes closing metaboxes handler and opens all previously closed metaboxes.

php (plugin.php)

function add_admin_scripts( $hook ) {    
  wp_register_script( 'disable_metabox_toggling', plugin_dir_url(__FILE__) . 'index.js', 'jquery', '1.0.0', true);
  wp_enqueue_script( 'disable_metabox_toggling' );
}
add_action( 'admin_enqueue_scripts', 'add_admin_scripts', 10, 1 );

js (index.js)

(function($){
  $(document).ready(function() {
     $('.postbox .hndle').unbind('click.postboxes');
     $('.postbox .handlediv').remove();
     $('.postbox').removeClass('closed');
  });
})(jQuery);

If you want to use it inside theme you should replace plugin_dir_url(__FILE__) with get_template_directory_uri() or get_stylesheet_directory_uri() for a child theme.

1
  • This is better than unloading the whole postbox script, thanks!
    – alana314
    Commented Jul 5, 2017 at 17:20
1

Simplified & best version :

function disable_metabox_folding()
{ ?><script>
    jQuery(window).load(function() {
       jQuery('.postbox .hndle').css('pointer-events', 'none');
       jQuery('.postbox .hndle').unbind('click.postboxes');
       jQuery('.postbox .handlediv').remove();
       jQuery('.postbox').removeClass('closed');
    });
    </script><?php
}

add_action('admin_footer', 'disable_metabox_folding'); 

//thanks to @jmarceli for hints

1
  • What about removing/disabling the sort arrow as well?
    – Shae
    Commented Jan 11, 2022 at 16:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.