Проблема с выводом текста в WordPress ('esc_html' и 'wp_richedit_pre')

19 окт. 2011 г., 01:00:32
Просмотры: 4.01K
Голосов: 0

У меня проблема с выводом текста. Когда я редактирую текст в панели управления WordPress, всё выглядит нормально:

https://i.sstatic.net/GaIut.png

Но когда я вывожу его в HTML:

<?php esc_html( wp_richedit_pre( $_product->details ) ); ?>

Текст отображается вот так:

https://i.sstatic.net/r81xE.png

В чём может быть проблема? Прошу помощи.

0
Все ответы на вопрос 2
2

Предположим, что $_product->details содержит то, что можно назвать контентом записи, и содержит HTML, и вы хотите, чтобы этот HTML был обработан браузером — тогда вы делаете это неправильно.

Пожалуйста, ознакомьтесь с функцией esc_html и поэкспериментируйте с ней в песочнице — вы быстро поймете, что делает эта функция (как и указано в Кодексе): она экранирует HTML, то есть преобразует специальные символы в HTML-сущности, чтобы эти символы отображались как текст и не интерпретировались браузером.

echo esc_html('<b>a string</b>'); // Выводит &lt;b&gt;a string&lt;/b&gt;
echo '<b>a string</b>'; // Выводит <b>a string</b>

Таким образом, краткий ответ на вашу проблему — удалите функцию esc_html из вывода.

19 окт. 2011 г. 06:32:53
Комментарии

Я попробовал таким образом (убрал 'esc_html'), но ничего не изменилось.

Siri Siri
19 окт. 2011 г. 19:30:34

Можешь вставить сюда var_dump($_product->details); твоего $_product->details, чтобы мы могли увидеть, какие данные там содержатся изначально?

soulseekah soulseekah
20 окт. 2011 г. 09:15:03
0

Хм... странно. Я посмотрел файл 'wp-includes/formatting.php' на функцию wp_richedit_pre:

function wp_richedit_pre($text) {
      // Фильтрация пустого результата приводит к раздражающему <br />\n
      if ( empty($text) ) return apply_filters('richedit_pre', '');

      $output = convert_chars($text);
      $output = wpautop($output);
      $output = htmlspecialchars($output, ENT_NOQUOTES);

      return apply_filters('richedit_pre', $output);
}

Вместо 'wp_richedit_pre()' я использовал 'wpautop()', и это сработало.

https://i.sstatic.net/Jiuiy.png

Спасибо за подсказку, Soulseekah.

20 окт. 2011 г. 14:44:15