Сохранение переносов строк при сохранении и отображении данных произвольных полей
Я собираю данные через плагин форм и сохраняю эти данные в виде поста с несколькими произвольными полями. Затем я отображаю содержимое поста и произвольные поля в шаблоне поста, используя...
if( get_post_meta( $post->ID, '_aboutus', true ) ) :
echo '<div class="companyaboutus">' . get_post_meta($post->ID, '_aboutus', true) . '</div>';
endif;
Поле формы для текста "О нас" представляет собой textarea, и большинство пользователей добавляют в поле несколько строк текста. Однако при отображении содержимого/текста с помощью приведенного выше кода переносы строк не отображаются - есть идеи, как сохранить переносы строк?

Я столкнулся с тем же вопросом и протестировал функцию wpautop()
. Она сработала, например:
echo wpautop(get_post_meta($post->ID, '_aboutus', true));
Однако обнаружил одну проблему. При санитизации пользовательского ввода не используйте методы санитизации, которые удаляют переносы строк перед применением wpautop :)

Это может помочь,
http://codex.wordpress.org/Function_Reference/wpautop
Эта функция преобразует переносы строк в HTML-теги <br/>

Я не знаю, какой плагин формы вы используете и как он сохраняет данные в базу данных. Но я предполагаю, что переносы строк сохраняются в базу данных.
Но, как вы, возможно, знаете, перенос строки в исходном коде HTML-страницы не отображается как перенос строки в браузере. Существует очень удобная PHP-функция под названием nl2br(), которая добавляет тег
для каждого переноса строки в тексте пользовательского контента.

Что мне нравится делать — это воссоздавать все стандартные фильтры, применяемые к the_content
, добавляя следующий код в functions.php.
/*
* Воссоздаем стандартные фильтры для the_content
* это значительно упростит вывод мета-контента с правильным/ожидаемым форматированием
*/
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' );
Тогда код в шаблоне будет выглядеть так:
<?php
if( $about = get_post_meta($post->ID, '_aboutus', true ) ):
echo '<div class="companyaboutus">'. apply_filters( 'meta_content', $about ) . '</div>';
endif;
?>
Конечно, можно использовать the_content
, но я обнаружил, что плагины также любят подключаться к нему для отображения кнопок "Поделиться" и тому подобного, поэтому этот метод позволяет избежать захвата вашей страницы кнопками "Поделиться".

Похоже, это работает нормально:
<? $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; ?>
