It is hard to declare best practices here.
The placement depends on the content of the metabox: an editor field would be too narrow usually in the side column; two small checkboxes on the other hand will look lost in the main column.
To understand where which box will be placed, let’s use a small demo plugin:
add_action( 'add_meta_boxes_post', 'register_demo_metaboxes' );
function register_demo_metaboxes()
{
$contexts = array ( 'normal', 'advanced', 'side' );
$priorities = array ( 'high', 'sorted', 'core', 'default', 'low' );
foreach ( $contexts as $context )
foreach ( $priorities as $priority )
add_meta_box(
"demo-$context-$priority", // id
"$context/$priority", // title
'demo_metabox_callback', // callback
NULL, // screen
$context,
$priority
);
}
function demo_metabox_callback( $object, $box )
{
static $count = 1;
print "number " . $count++;
}
side/high
and side/sorted
will be placed above the Publish box, normal/high
immediately after the editor, */low
at the end of the screen and probably out of sight.
Some rules I try to follow:
- Do not move the Publish box. Users might not figure out how to move the box down. This can be very annoying.
- Try to understand how often a box might be used. A setting you turn on or off just one time per post should be very low.
- Order by importance: boxes with required fields (price of a product) should be very prominent, a description that will be extracted from the main content if empty, doesn’t have to be visible all the time.
- Some users will move the box out of sight, some might disable it completely. Prepare your callback handlers for that.
- Use
normal/default
orside/default
if you are not sure.