Păstrarea întreruperilor de linie la salvarea și afișarea datelor din câmpuri personalizate

20 aug. 2012, 15:46:45
Vizualizări: 26.6K
Voturi: 8

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?

1
Comentarii

Ai putea adăuga CSS white-space: pre-wrap. Vezi acest răspuns pe StackOverflow

Kaspar Lee Kaspar Lee
17 ian. 2016 11:45:49
Toate răspunsurile la întrebare 7
0
10

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

5 nov. 2014 14:14:52
0

Acest lucru ar putea ajuta probabil,

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

Aceasta convertește noile linii în tag-uri HTML <br/>

29 oct. 2012 14:15:12
0

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.

20 aug. 2012 20:28:54
0

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.

1 dec. 2013 15:19:41
0

Folosește wp_kses cu un array gol ca parametru allowed_html. Acest lucru va sanitiza șirul de caractere fără a elimina liniile noi și ar trebui să treacă majoritatea standardelor de codare

23 iul. 2016 00:04:46
0

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

Convertește \n în <br>

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