Mantenere gli "a capo" quando si salvano e visualizzano i dati dei campi personalizzati
Sto raccogliendo dati tramite un plugin per form e salvando questi dati sotto forma di post con diversi campi personalizzati. Successivamente visualizzo il contenuto del post e i campi personalizzati nel mio template usando...
if( get_post_meta( $post->ID, '_aboutus', true ) ) :
echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;
Il campo del form per il testo "Chi siamo" è un'area di testo e la maggior parte dei contributori aggiunge diverse righe di testo nel campo. Tuttavia, visualizzando il contenuto/testo tramite il codice sopra non vengono mostrati gli "a capo" - qualche idea su come preservare i line break?

Mi sono bloccato con la stessa domanda e ho effettivamente testato wpautop()
. Ha funzionato, ad esempio:
echo wpautop(get_post_meta($post->ID, '_aboutus', true));
Tuttavia, mi sono imbattuto in un problema. Quando si sanitizza l'input dell'utente, non utilizzare un metodo di sanitizzazione che rimuove gli a capo prima di usare wpautop :)

Questo potrebbe probabilmente aiutare,
http://codex.wordpress.org/Function_Reference/wpautop
Questa funzione converte le nuove righe in tag html <br/>

Non so quale plugin per moduli utilizzi e come salvi i dati nel database. Ma presumo che gli a capo vengano salvati nel database.
Ma come potresti sapere, un a capo nel codice sorgente di una pagina HTML non mostra un a capo nel browser. Esiste una pratica funzione PHP chiamata nl2br() che aggiungerà un tag <br/> per ogni a capo nel testo del contenuto dell'utente.

Quello che mi piace fare è ricreare tutti i filtri predefiniti che vengono applicati a the_content
aggiungendo quanto segue in functions.php.
/*
* Ricrea i filtri predefiniti su the_content
* questo renderà molto più semplice visualizzare il contenuto meta con la formattazione corretta/attesa
*/
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' );
Quindi il codice del template sarebbe:
<?php
if( $about = get_post_meta($post->ID, '_aboutus', true ) ):
echo '<div class="companyaboutus">'. apply_filters( 'meta_content', $about ) . '</div>';
endif;
?>
Potresti, naturalmente, usare the_content
ma ho scoperto che anche i plugin si agganciano a questo per mostrare pulsanti di condivisione e simili, quindi questo metodo evita che i pulsanti di condivisione prendano il controllo della tua pagina.

Sembra funzionare correttamente:
<? $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; ?>
