Finally I got around this. You need to modify tinymce args passed to wp_editor function. WordPress have a argument `wp_autoresize_on` to allow the editor to be resized automatically. So instead of these: 'tinymce' => array( 'toolbar1'=> 'bold,italic,underline,link,unlink,forecolor', 'toolbar2' => '', 'toolbar3' => '' ) you need to use this: 'tinymce' => array( 'autoresize_min_height' => 100, 'wp_autoresize_on' => true, 'plugins' => 'wpautoresize', 'toolbar1' => 'bold,italic,underline,link,unlink,forecolor', 'toolbar2' => '', ), There are two additional args in here, `autoresize_min_height`, you can set it to desired height, and second one is `'wp_autoresize_on' => true,`. Apart from that you need to pass additional parameter to load the tinymce plugin for auto resizing and i.e `'plugins' => 'wpautoresize'` and the auto resizing works flawlessly. With these changes, I'd suggest you add some other checks in your code. Like for the function: function xxx_textarea_save_fields_metabox($post_id, $post) { global $post_id; if ( !wp_verify_nonce( $_POST['xxx_textarea_noncename'], plugin_basename(__FILE__) )){return $post->ID;} if ( !current_user_can( 'edit_post', $post->ID )) {return $post->ID;} if( $post->post_type == 'revision' ) {return;$post->ID;} if($_POST['_xxx_textarea']) {$xxx_content = $_POST['_xxx_textarea'];} else{$xxx_content = '';}; if(get_post_meta($post_id, '_xxx_textarea', FALSE)) {update_post_meta($post_id, '_xxx_textarea', $xxx_content);} else{ add_post_meta($post_id, '_xxx_textarea', $xxx_content);}; } Make sure to add a check for empty $_POST, otherwise you'll get notices on post edit screen. I've made the changes and formatted the code ( You should be doing that ), here is the whole code for adding metabox. add_action( 'add_meta_boxes', 'xxx_textarea_add_fields_metabox' ); function xxx_textarea_add_fields_metabox() { add_meta_box( 'xxx_textarea_metabox', 'Intro', 'xxx_textarea_show_fields_metabox', 'new_xxx', 'side', 'default' ); } function xxx_textarea_show_fields_metabox() { global $post; $content = get_post_meta( $post->ID, '_xxx_textarea', true ); //Loads the editor to allow adding fresh content if there is no content already $content = empty( $content ) ? '' : $content; $args = array( 'description_name' => 'xxx_textarea', 'teeny' => true, 'quicktags' => false, 'media_buttons' => false, 'tinymce' => array( 'autoresize_min_height' => 100, 'wp_autoresize_on' => true, 'plugins' => 'wpautoresize', 'toolbar1' => 'bold,italic,underline,link,unlink,forecolor', 'toolbar2' => '', ), ); wp_editor( $content, '_xxx_textarea', $args ); wp_nonce_field( plugin_basename( __FILE__ ), 'xxx_textarea_noncename' ); } add_action( 'save_post', 'xxx_textarea_save_fields_metabox', 1, 2 ); function xxx_textarea_save_fields_metabox( $post_id, $post ) { global $post_id; //Avoids notice and warnings if( empty( $_POST ) ) { return $post->ID; } if ( !empty( $_POST['xxx_textarea_noncename'] ) && ! wp_verify_nonce( $_POST['xxx_textarea_noncename'], plugin_basename( __FILE__ ) ) ) { return $post->ID; } if ( ! current_user_can( 'edit_post', $post->ID ) ) { return $post->ID; } if ( $post->post_type == 'revision' ) { return; $post->ID; } if ( $_POST['_xxx_textarea'] ) { $xxx_content = $_POST['_xxx_textarea']; } else { $xxx_content = ''; }; if ( get_post_meta( $post_id, '_xxx_textarea', false ) ) { update_post_meta( $post_id, '_xxx_textarea', $xxx_content ); } else { add_post_meta( $post_id, '_xxx_textarea', $xxx_content ); }; } That should do it.