¿Cómo evitar el escape al guardar código HTML en un valor de opción?
Tengo una página de Opciones del Tema donde el usuario puede agregar ciertas opciones como enlaces de Facebook, etc. Una de las opciones es para código de publicidad y cuando se guarda como opción, se escapa una y otra vez.
¿Cuál es el mejor enfoque para guardar código insertado en una página de administración <textarea>
usando update_option( 'sidebar_code', $_POST['sidebar_code'] );
?

Tomé otro enfoque para esto. Codifiqué y decodifiqué mis opciones con entidades HTML. Una cosa de la que no estoy seguro es si esto abre una fea puerta trasera para que la gente introduzca HTML comprometedor. Estoy confiando en el hecho de que solo los administradores editarán las opciones del tema de todos modos, pero tal vez estoy siendo ingenuo.
Así es como se ve cuando guardo una opción:
update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));
Y así es como se ve cuando recupero una opción:
html_entity_decode(get_option('my_option',htmlentities($my_default_value)));

Quiero decir que alguien aún podría hacer XSS en tu sitio si es realmente bueno en ello. Si no me equivoco, el último parche de WP solucionó una vulnerabilidad XSS en las funciones kses

Esto no es una respuesta completa a tu pregunta, pero posiblemente te oriente en la dirección correcta: Podrías probar <?php esc_textarea( $text ) ?>
, como detalla el codex aquí: http://codex.wordpress.org/Function_Reference/esc_textarea.
Mis propios fragmentos de código para textareas en metaboxes se ven así:
<?php
if ( $meta_box['type'] == "textarea" ) {
$meta_box_value = esc_textarea( get_post_meta($post->ID, $meta_box['name'].'_value', true) );
echo '<textarea class="meta-textarea" style="width: 100%;" cols="20" rows="2" name="' . $meta_box['name'] . '_value">' . $meta_box_value . '</textarea><br />';
}
?>
