web-dev-qa-db-fra.com

Préservation des sauts de ligne lors de l'enregistrement et de l'affichage des données de champs personnalisés

Je collecte des données via un plug-in de formulaire et les enregistre sous forme de publication avec plusieurs champs personnalisés. J'affiche ensuite le contenu de la publication et les champs personnalisés de mon modèle de publication à l'aide de ...

if( get_post_meta( $post->ID, '_aboutus', true ) ) :                        
    echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;

Le champ de formulaire pour le texte "À propos de nous" est une zone de texte et la plupart des contributeurs ajoutent plusieurs lignes de texte dans le champ. L'affichage du contenu/texte via le code ci-dessus ne montre pas de sauts de ligne - vous savez comment conserver les sauts de ligne?

1
Thomas

Cela pourrait probablement aider,

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

Ceci convertit les nouvelles lignes en balises html <br/>

3
Halaster

J'ai collé avec la même question et réellement testé wpautop(). Cela a fonctionné, par exemple.

echo wpautop(get_post_meta($post->ID, '_aboutus', true));

Pourtant, je suis venu autour d'un problème. Lors de la désinfection de l'entrée utilisateur, n'utilisez pas de méthode de désinfection supprimant les sauts de ligne avant d'utiliser wpautop :)

2
Thomas

Ce que j'aime faire, c'est recréer tous les filtres par défaut appliqués à the_content en ajoutant les éléments suivants dans functions.php.

/* 
 * Recreate the default filters on the_content
 * this will make it much easier to output the meta content with proper/expected formatting
*/
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' );

Ensuite, le code de modèle ressemblerait à ceci:

<?php 
if( $about = get_post_meta($post->ID, '_aboutus', true ) ): 
  echo '<div class="companyaboutus">'. apply_filters( 'meta_content', $about ) . '</div>'; 
endif; 
?>

Vous pouvez, bien sûr, utiliser the_content, mais j’ai constaté que les plugins souhaitaient également s’accrocher à celui-ci pour afficher les boutons de partage, etc. Cette méthode évite ainsi aux boutons de partage de prendre en charge votre page.

1
helgatheviking

Cela semble bien fonctionner:

<? $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; ?>
0
Thomas

Utilisez wp_kses avec un tableau vide comme paramètre allowed_html. Cela désinfectera la chaîne sans supprimer les sauts de ligne et devrait respecter la plupart des normes de codage

0
Nick B

Je ne sais pas quel plugin de formulaire vous utilisez et comment il enregistre les données dans la base de données. Mais je suppose que les sauts de ligne sont enregistrés dans la base de données.

Mais comme vous le savez peut-être, un saut de ligne dans le code source d'une page HTML n'indique pas de saut de ligne dans le navigateur. Le est une fonction très pratique PHP appelée nl2br () qui ajoutera un
balise pour chaque saut de ligne dans le texte du contenu de l'utilisateur.

0
2ndkauboy

Concerts \n à <br>

nl2br(get_post_meta($post->ID, '_aboutus', true));
0
user2242022