I found out I needed to add html_entity_decode()
around the value so my final code is…
/**
* Add Copyright text to general settings menu
*/
$custom_general_settings = new FD_Custom_General_Settings();
class FD_Custom_General_Settings
{
function __construct()
{
add_filter('admin_init', array(&$this , 'register_fields'));
}
function register_fields()
{
register_setting('general', 'footer_text', 'esc_attr');
add_settings_field('footer_text', '<label for="footer_text">'.__('Footer Text' , 'footer_text' ).'</label>' , array(&$this, 'fields_html') , 'general');
}
function fields_html()
{
$value = html_entity_decode(get_option('footer_text', ''));
wp_editor($value, 'footer_text', array('textarea_rows'=>4), false);
}
}
and then to output it into the theme and maintain any shortcodes and linebreaks…
echo nl2br(html_entity_decode(do_shortcode(get_option('footer_text', ''))));