Сохранение переносов строк при сохранении и отображении данных произвольных полей

20 авг. 2012 г., 15:46:45
Просмотры: 26.6K
Голосов: 8

Я собираю данные через плагин форм и сохраняю эти данные в виде поста с несколькими произвольными полями. Затем я отображаю содержимое поста и произвольные поля в шаблоне поста, используя...

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

Поле формы для текста "О нас" представляет собой textarea, и большинство пользователей добавляют в поле несколько строк текста. Однако при отображении содержимого/текста с помощью приведенного выше кода переносы строк не отображаются - есть идеи, как сохранить переносы строк?

1
Комментарии

Вы можете добавить CSS свойство white-space: pre-wrap. Посмотрите этот ответ на StackOverflow

Kaspar Lee Kaspar Lee
17 янв. 2016 г. 11:45:49
Все ответы на вопрос 7
0
10

Я столкнулся с тем же вопросом и протестировал функцию wpautop(). Она сработала, например:

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

Однако обнаружил одну проблему. При санитизации пользовательского ввода не используйте методы санитизации, которые удаляют переносы строк перед применением wpautop :)

5 нояб. 2014 г. 14:14:52
0

Это может помочь,

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

Эта функция преобразует переносы строк в HTML-теги <br/>

29 окт. 2012 г. 14:15:12
0

Я не знаю, какой плагин формы вы используете и как он сохраняет данные в базу данных. Но я предполагаю, что переносы строк сохраняются в базу данных.

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

20 авг. 2012 г. 20:28:54
0

Что мне нравится делать — это воссоздавать все стандартные фильтры, применяемые к 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, но я обнаружил, что плагины также любят подключаться к нему для отображения кнопок "Поделиться" и тому подобного, поэтому этот метод позволяет избежать захвата вашей страницы кнопками "Поделиться".

1 дек. 2013 г. 15:19:41
0

Используйте wp_kses с пустым массивом в качестве параметра allowed_html. Это очистит строку, не удаляя переносы строк, и соответствует большинству стандартов кодирования.

23 июл. 2016 г. 00:04:46
0

Похоже, это работает нормально:

<? $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; ?>
21 авг. 2012 г. 11:26:34
0

Преобразует \n в <br>

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