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

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);
| improve this answer | |
  • Thanks Brian. That seems to the trick nicely. Do you know if removing the entire 'postbox' script in this way causes other issues? – Scott Oct 25 '11 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. – Brian Fegter Oct 25 '11 at 9:23
  • Thanks Brian. Luckily I do not need the sorting either so this is a silver bullet! – Scott Oct 25 '11 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 Nov 13 '13 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.

| improve this answer | |
  • This is better than unloading the whole postbox script, thanks! – jordan314 Jul 5 '17 at 17:20
0

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

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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