Set Default Admin Screen options & Metabox Order

Setting the order of meta boxes on post edit pages

You will need to remove the meta boxes, and add them again in the order you want.

To disable meta boxes: (customize to your needs, look at the metabox id in the html code to know which name you should use as first parameter of the functions)

function my_remove_meta_boxes() {

    remove_meta_box('postcustom', 'post', 'core');

    remove_meta_box('commentsdiv', 'post', 'core');

    ...
}

add_action( 'admin_menu', 'my_remove_meta_boxes' );

After removing them, you can use the add_meta_box function to add them at new positions: http://codex.wordpress.org/Function_Reference/add_meta_box. The order of the meta boxes depends on the order in which you call the add_meta_box function. E.g.: with the following code snippet, the comments meta box will be before the custom fields meta box.

function my_add_meta_boxes( $post_type, $post ) {
    if ( ('publish' == $post->post_status || 'private' == $post->post_status) && post_type_supports($post_type, 'comments') )
        add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', $post_type, 'normal', 'core');

    if ( post_type_supports($post_type, 'custom-fields') )
        add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', $post_type, 'normal', 'core');

    ...
}

add_action( 'add_meta_boxes', 'my_add_meta_boxes' );

You may want to look at the file wp-admin/edit-form-advanced.php

Setting which columns title show up on the post list page

You need to use the filter manage_{$post_type}_posts_columns. E.g.: the following snippet will remove the comments column.

function my_remove_columns( $posts_columns ) {
    unset( $posts_columns['comments'] );

    return $posts_columns;
}

add_filter( 'manage_post_posts_columns', 'my_remove_columns' );

Setting the default results to be shown on the post list page

Use the filters ‘edit_{$post_type}_per_page’ and ‘edit_posts_per_page’.

function my_edit_post_per_page( $per_page, $post_type ) {

    $edit_per_page="edit_" . $post_type . '_per_page';
    $per_page = (int) get_user_option( $edit_per_page );
    if ( empty( $per_page ) || $per_page < 1 )
        $per_page = 1;

    return $per_page;
}

add_filter( 'edit_posts_per_page', 'my_edit_post_per_page' );

To target a specific post type:

  • use add_filter( 'edit_{post type}_per_page', 'my_edit_post_per_page' ); e.g. add_filter( 'edit_post_per_page', 'my_edit_post_per_page' ); for posts, add_filter( 'edit_page_per_page', 'my_edit_post_per_page' ); for pages.

  • or use a condition within your function. e.g.:

    function my_edit_post_per_page( $per_page, $post_type ) {

    if( $post_type == 'post' ) {
        $edit_per_page="edit_" . $post_type . '_per_page';
        $per_page = (int) get_user_option( $edit_per_page );
        if ( empty( $per_page ) || $per_page < 1 )
            $per_page = 1;
    }
    
    
    return $per_page;
    

Leave a Comment