Preservar saltos de línea al guardar y mostrar datos de campos personalizados
Estoy recopilando datos a través de un plugin de formularios y guardando esos datos en forma de publicación con varios campos personalizados. Luego muestro el contenido de la publicación y los campos personalizados en mi plantilla de publicación usando...
if( get_post_meta( $post->ID, '_aboutus', true ) ) :
echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;
El campo del formulario para el texto "Acerca de nosotros" es un textarea y la mayoría de los contribuyentes agregan varias líneas de texto en el campo. Sin embargo, al mostrar el contenido/texto mediante el código anterior no se muestran los saltos de línea - ¿alguna idea de cómo preservar los saltos de línea?

Me quedé atascado con la misma pregunta y en realidad probé wpautop()
. Funcionó, por ejemplo:
echo wpautop(get_post_meta($post->ID, '_aboutus', true));
Aún así, me encontré con un problema. Al sanear la entrada del usuario, no uses un método de saneamiento que elimine los saltos de línea antes de usar wpautop :)

Esto podría ayudar,
http://codex.wordpress.org/Function_Reference/wpautop
Esto convierte los saltos de línea en etiquetas html <br/>

No sé qué plugin de formularios utilizas ni cómo guarda los datos en la base de datos. Pero asumiría que los saltos de línea se guardan en la base de datos.
Pero como probablemente sepas, un salto de línea en el código fuente de una página HTML no muestra un salto de línea en el navegador. Existe una práctica función de PHP llamada nl2br() que añadirá una etiqueta <br/> por cada salto de línea en el texto del contenido del usuario.

Lo que me gusta hacer es recrear todos los filtros predeterminados que se aplican a the_content
agregando lo siguiente en functions.php.
/*
* Recrear los filtros predeterminados en the_content
* esto hará que sea mucho más fácil mostrar el contenido meta con el formato adecuado/esperado
*/
add_filter( 'meta_content', 'wptexturize' );
add_filter( 'meta_content', 'convert_smilies' );
add_filter( 'meta_content', 'convert_chars' );
add_filter( 'meta_content', 'wpautop' );
add_filter( 'meta_content', 'shortcode_unautop' );
add_filter( 'meta_content', 'prepend_attachment' );
Entonces el código de la plantilla se vería así:
<?php
if( $about = get_post_meta($post->ID, '_aboutus', true ) ):
echo '<div class="companyaboutus">'. apply_filters( 'meta_content', $about ) . '</div>';
endif;
?>
Por supuesto, podrías usar the_content
, pero he encontrado que a los plugins también les gusta engancharse ahí para mostrar botones de compartir y similares, por lo que este método evita que los botones de compartir se apoderen de tu página.

Esto parece funcionar bien:
<? $source = get_post_meta($post->ID, '_aboutus', true);
if($source){
$source = explode("\n", $source); ?>
<? for($i = 0;$i<sizeof($source);$i++){ ?>
<? echo $source[$i]; ?><br />
<? } ?>
<? } ?>
<?php if(get_post_meta($post->ID, '_aboutus', true)): echo '</div>'; endif; ?>
