Preservar saltos de línea al guardar y mostrar datos de campos personalizados

20 ago 2012, 15:46:45
Vistas: 26.6K
Votos: 8

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?

1
Comentarios

Podrías agregar el CSS white-space: pre-wrap. Revisa esta respuesta en StackOverflow

Kaspar Lee Kaspar Lee
17 ene 2016 11:45:49
Todas las respuestas a la pregunta 7
0
10

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 :)

5 nov 2014 14:14:52
0

Esto podría ayudar,

http://codex.wordpress.org/Function_Reference/wpautop

Esto convierte los saltos de línea en etiquetas html <br/>

29 oct 2012 14:15:12
0

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.

20 ago 2012 20:28:54
0

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.

1 dic 2013 15:19:41
0

Usa wp_kses con un array vacío como parámetro allowed_html. Esto sanitizará la cadena sin eliminar saltos de línea y debería pasar la mayoría de estándares de codificación

23 jul 2016 00:04:46
0

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; ?>
21 ago 2012 11:26:34
0

Convierte \n en <br>

nl2br(get_post_meta($post->ID, '_aboutus', true));
17 dic 2015 18:52:27