Custom Fields are perfect for this when you want not different excerpt lenght, but also different excerpt content.
Following code will add additional TinyMCE editor to the Edit Post admin page so you can write formatted excerpt specially for your front page. Excerpt will be stored in _wpse83958_front_page_excerpt
custom field. Preceding underscore makes it invisible in Custom Fields
metabox.
Put it to your functions.php
:
// Do not use 'add_meta_boxes' with TinyMCE
add_action( 'edit_form_advanced', 'wpse83958AddFrontPageExcerptEditor' );
add_action( 'save_post', 'wpse83958SaveFrontPageExcerpt' );
function wpse83958AddFrontPageExcerptEditor() {
global $post;
wp_nonce_field( 'wpse83958_front_page_excerpt', 'wpse83958_front_page_excerpt_noncename' );
echo '<h2>Front page excerpt</h2>';
// 'textarea_name' argument is necessary because of 'editor_id' parameter limitations (http://codex.wordpress.org/Function_Reference/wp_editor#Parameters)
// See http://core.trac.wordpress.org/ticket/19173 for information about Editor moving (drag'n'drop)
// second argument ($editor_id) must contain lowercase letters ONLY ([a-z])
wp_editor(
get_post_meta($post->ID, '_wpse83958_front_page_excerpt', true),
'wpse83958frontpageexcerpt',
array(
'textarea_name' => 'wpse83958_front_page_excerpt',
'wpautop' => true
)
);
}
function wpse83958SaveFrontPageExcerpt( $post_id ) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return;
if( isset($_POST['wpse83958_front_page_excerpt']) && !wp_verify_nonce( $_POST['wpse83958_front_page_excerpt_noncename'], 'wpse83958_front_page_excerpt' ) )
return;
if ( !current_user_can( 'edit_page', $post_id ) || !current_user_can( 'edit_post', $post_id ) )
return;
$wpse83958_front_page_excerpt = $_POST['wpse83958_front_page_excerpt'];
if('' != $wpse83958_front_page_excerpt)
update_post_meta($post_id, '_wpse83958_front_page_excerpt', $wpse83958_front_page_excerpt);
else
delete_post_meta($post_id, '_wpse83958_front_page_excerpt');
}
And get your excerpt inside front page loop:
$front_page_excerpt = get_post_meta($post->ID, '_wpse83958_front_page_excerpt', true);
// Change double linebreaks to '<p>' elements as only 'the content' and 'the excerpt' do use them automatically
$front_page_excerpt = wpautop($front_page_excerpt);
echo $front_page_excerpt;