• Как победить умный ВП, вставляющий html-код в textarea?

    Ситуация в след.
    В плагин multilang contact form понадобилось вставить многострочное поле (ToS).

    При выводе его значения в textarea отображаются html-теги. Хотя в базе храниться без них. (Видимо ВП при выводе преобразовывает \r\n в <br />, а \r\n\r\n в </p><p>.)

    Пытаюсь вывести значение так:
    <textarea name="mlcf_tos" id="mlcf_tos" cols="35" rows="5" readonly>' . __(strip_tags (get_option('mlcf_field_tos'), 'mlcf')) . '</textarea>

    Но не помогает.
    Как можно это победить?

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Выложите на Pastebin весь код плагина с изменениями.

    Автор wpuser

    (@wp-userphp)

    Выложите на Pastebin весь код плагина с изменениями.

    1. Да плаг ещё не допилен — пока «черновик».
    2. Я как бэ не очень чтобы кодер 🙂 Так.. местами могу разобраться. (тем более что исходный плаг из 2-файлов всего)
    3. Я буржуйского не знаю.

    4. Главное. Как показали эксперименты — дело наверняка не в плагине. Если просто в страницу (PAGE) вставить многострочное textarea — происходит тоже самое.

    Может где-то какие-то фильтры нужно применить? Как?

    UPD. Я, видимо, не точно назвал топик. Нужно не полностью удалить теги, а удалить их вывод (отображение) в textarea. К сожалению, уже не могу поправить название топика.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    В общем случае strip_tags() работает.

    Установил плагин — теперь, чтобы ответить на вопрос, мне понадобится:

    1. Найти место для вставки процитированного фрагмента.
    2. Угадать другие ваши изменения (или сделать их по-своему), чтобы фрагмент воспринимался плагином.
    3. Найти причину проблемы.
    4. Придумать решение.

    Я, конечно, попробую, но это будет дольше и не факт, что сегодня 🙂

    Без первых двух шагов было бы проще, тем более что для отправки кода на Pastebin регистрироваться там не нужно.

    По поводу процитированного фрагмента:

    __(strip_tags (get_option('mlcf_field_tos'), 'mlcf'))

    Эту строку правильнее было бы записать так (обратите внимание на скобки):

    __( strip_tags( get_option('mlcf_field_tos') ), 'mlcf' )

    Локализация здесь вряд ли нужна, поэтому остаётся:

    strip_tags( get_option('mlcf_field_tos') )

    Но вполне возможно, что проблема не в этом.

    Автор wpuser

    (@wp-userphp)

    теперь, чтобы ответить на вопрос, мне понадобится:

    Могу выслать на мыло. Какое?

    Но вполне возможно, что проблема не в этом.

    Да, как я выше сказал — это «проблема» в самом ВП. Если просто вставить в пост

    <textarea>Вот тут
    вставим любой многострочный
    
    текст</textarea>

    ,

    то при выводе страницы ВП в него вставляет теги переносов строк и параграфов (в базе тегов нет).
    Т.е. выводит в textarea приблизительно так:

    ----
    Вот тут<br />
    вставим любой многострочный</p>
    
    <p>текст
    ----

    Сами переносы надо, но вот показывать html-код в поле — это лишнее.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Ага, теперь понял. Нужно отключить для этой страницы фильтр wpautop.

    Можно добавить подобную строку в page.php перед the_content():

    <?php if ( is_page('contact') ) remove_filter('the_content', 'wpautop'); ?>

    Или фрагмент в functions.php активной темы:

    function remove_wpautop_for_contact_form($content) {
    	if ( false !== strpos($content, '<!--contact form-->') )
    		remove_filter('the_content', 'wpautop');
    
    	return $content;
    }
    add_filter('the_content', 'remove_wpautop_for_contact_form', 5);

    Или воспользоваться плагином типа Text Control:
    http://wordpress.org/extend/plugins/text-control-2/

    Автор wpuser

    (@wp-userphp)

    Спасибо большое, срослось внесением изменений в functions.php.

    Однако можно ещё попытать? 😉
    Вот этого не понял:

    Можно добавить подобную строку в page.php перед the_content():

    1. В этом файле нет вызова the_content(). Куда вставлять, чтобы правильно?

    2. Что в коде есть ‘contact’? часть урла? слаг? или что? (как определить что нужно тут написать?)

    И последнее (наиболее интересно)
    3. Можно ли и как глобально (не в шаблоне) исправить эту «фичу» ВП. А именно — отключить фильтр wpautop для всех тегов форм (input, textarea и др)? (Без плагинов, ессно)

    Автор wpuser

    (@wp-userphp)

    И всё-таки, как победить этот баг ВП?

    А именно — отключить фильтр wpautop для всех тегов форм (input, textarea и др)? (Без плагинов, ессно)

    ..и конечно же без правки шаблонов.

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Удалить html в textarea» закрыта для новых ответов.