How to remove the Template drop down, but keep Parent and Order

I am about to turn a custom WordPress site over to a client and do not want them to be able to choose/edit Templates, but need to allow them to sort the pages with Order and choose a Parent page.

Is there a way to only remove the Template drop down from the Page Attributes option, but keep the Parent and Order options?

Related posts

Leave a Reply

1 comment

  1. When you remove that box from admin (as you’ve written in the comment), you should be able to re-register that box with custom function (modified original) to render the box:

    if ( post_type_supports($post_type, 'page-attributes') )
        add_meta_box('pageparentdiv', 'page' == $post_type ? __('Page Attributes') : __('Attributes'), 'my_page_attributes_meta_box', null, 'side', 'core');
    
    function my_page_attributes_meta_box($post) {
        $post_type_object = get_post_type_object($post->post_type);
        if ( $post_type_object->hierarchical ) {
            $dropdown_args = array(
                'post_type'        => $post->post_type,
                'exclude_tree'     => $post->ID,
                'selected'         => $post->post_parent,
                'name'             => 'parent_id',
                'show_option_none' => __('(no parent)'),
                'sort_column'      => 'menu_order, post_title',
                'echo'             => 0,
            );
    
            $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post );
            $pages = wp_dropdown_pages( $dropdown_args );
            if ( ! empty($pages) ) {
    ?>
    <p><strong><?php _e('Parent') ?></strong></p>
    <label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
    <?php echo $pages; ?>
    <?php
            } // end empty pages check
        } // end hierarchical check.
        if ( 'page' == $post->post_type && 0 != count( get_page_templates() ) ) {
            $template = !empty($post->page_template) ? $post->page_template : false;
            ?>
    <p><strong><?php _e('Template') ?></strong></p>
    <label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
    <option value='default'><?php _e('Default Template'); ?></option>
    <?php page_template_dropdown($template); ?>
    </select>
    <?php
        } ?>
    <p><strong><?php _e('Order') ?></strong></p>
    <p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
    <p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
    <?php
    }
    

    You can modify the function as much as you want to. The code of the function is taken from http://core.trac.wordpress.org/browser/tags/3.5.1/wp-admin/includes/meta-boxes.php#L618