Păstrarea întreruperilor de linie la salvarea și afișarea datelor din câmpuri personalizate
Colectez date printr-un plugin de formulare și salvez acele date sub forma unei postări cu mai multe câmpuri personalizate. Apoi afișez conținutul postării și câmpurile personalizate în șablonul postării folosind...
if( get_post_meta( $post->ID, '_aboutus', true ) ) :
echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;
Câmpul formularului pentru textul "Despre noi" este un textarea și majoritatea contribuitorilor adaugă mai multe linii de text în câmp. Totuși, afișarea conținutului/textului prin codul de mai sus nu arată nicio întrerupere de linie - aveți vreo idee cum să păstrez întreruperile de linie?

Am rămas blocat cu aceeași întrebare și am testat wpautop()
. A funcționat, de exemplu:
echo wpautop(get_post_meta($post->ID, '_aboutus', true));
Totuși, am dat peste o problemă. Când sanitizați inputul utilizatorului, nu folosiți o metodă de sanitizare care elimină întreruperile de linie înainte de a utiliza wpautop :)

Acest lucru ar putea ajuta probabil,
http://codex.wordpress.org/Function_Reference/wpautop
Aceasta convertește noile linii în tag-uri HTML <br/>

Nu știu ce plugin de formular folosești și cum salvează datele în baza de date. Dar aș presupune că liniile noi sunt salvate în baza de date.
Dar după cum probabil știi, un sfârșit de linie în codul sursă al unei pagini HTML nu afișează o linie nouă în browser. Există o funcție PHP foarte utilă numită nl2br() care va adăuga un tag <br/> pentru fiecare sfârșit de linie în textul introdus de utilizator.

Ceea ce îmi place să fac este să recrez toate filtrele implicite care sunt aplicate la the_content
prin adăugarea următoarelor în functions.php.
/*
* Recrearea filtrelor implicite pe the_content
* acest lucru va face mult mai ușor să afișezi conținutul meta cu formatarea corectă/asteptată
*/
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' );
Atunci codul din template ar arăta astfel:
<?php
if( $about = get_post_meta($post->ID, '_aboutus', true ) ):
echo '<div class="companyaboutus">'. apply_filters( 'meta_content', $about ) . '</div>';
endif;
?>
Desigur, ai putea folosi the_content
, dar am descoperit că pluginurile folosesc și ele acest filtru pentru a afișa butoane de partajare și altele asemenea, așa că această metodă evită ca butoanele de partajare să preia controlul paginii tale.

Acest cod pare să funcționeze corect:
<?php
// Obținem metadatele '_aboutus' pentru postul curent
$source = get_post_meta($post->ID, '_aboutus', true);
if($source){
// Împărțim conținutul în linii separate
$source = explode("\n", $source);
// Afișăm fiecare linie
for($i = 0; $i < sizeof($source); $i++){
echo $source[$i] . '<br />';
}
}
// Dacă există metadate '_aboutus', închidem div-ul
if(get_post_meta($post->ID, '_aboutus', true)):
echo '</div>';
endif;
?>
