Солнцеворот

Достало автоматическое добавление тегов p

    Рекомендуемые сообщения

    Достало.

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

    По интернету ходит легенда, будто это прекратится, если добавить в functions.php заглушку 

    remove_filter( 'the_content', 'wpautop');

    Но нет, эта заглушка - вредная полумера, костыль, который не решает проблему.

     

    На самом деле эти триклятые теги на ходу добавляет скрипт, когда вы пишете статью. Более того, он, похоже, срабатывает также и по таймеру и переделывает структуру документа на свой лад.

    Например, вставляем в пост картинку img, которая тут же обрамляется в тег p, получается так:

    <p>    <a href="#">        <img src="#"/>    </a></p> 

    Открываем отладчик, удаляем теги p прямо из DOM, на несколько секунд структура становится такой, как нам надо, но через 5-10 секунд срабатывает скрипт, который возвращает все на свои места.

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

     

    Братцы, я знаю, что это не только меня бесит, давайте наконец решим этот вопрос, подключайтесь!

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах
    abrahadabra    52
    abrahadabra

    Когда ж вы перестанете есть этот кактус?

    Какой там редактор? TinyMCE?

    Добавьте ему в конфиг:

    force_p_newlines : false,force_br_newlines : true,

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    @abrahadabra, спасибо. Может вы еще знаете, где этот конфиг в Вордпрессе?

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

    force_p_newlines

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах
    abrahadabra    52
    abrahadabra

    неа, вордпрессами не балуюсь. И другим не советую.

    Поиск не находит скорее всего потому что у вас этих настроек нет, и используются настройки по умолчанию.

    Редактор-то какой там? TinyMCE? Верно?

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    @abrahadabra, верно, TinyMCE. Раз у него таких команд не встречается, значит он их и не поймет.
    Еще раз добавлю о костыльности всего решения:

    • Создавая статью в визуальном редакторе TinyMCE он автоматически обрамляет все, что написано с новой строки тегами <p></p> .
    • При этом, перед сохранением записи в базу данных он эти теги удаляет, и в базе статья хранится без тегов <p></p>.
    • При выводе записи, Вордпресс считывает текст статьи из базы данных и заново обрамляет ее тегами <p></p>, где считает нужным.

    Вот три костыля, на которых работает это решение.
     
    Чтобы удалить костыль №3:
    Чтобы отключить добавление тегов при выводе записи, нужно добавить фильтр в functions.php :

    /* Отключаем добавление тегов <p></p> к записям при выводе */ remove_filter( 'the_content', 'wpautop' );

    Теперь нужно добиться, чтобы в базу данных сохранялась корректная запись (чтобы редактор не добавлял и не затирал теги).
     
    Костыли №1 и №2 можно обойти следующим образом:
    Переключиться в режим редактирования записи в виде HTML-текста, и больше не переключаться в режим Визуального редактора.
    e735accff6db.png
     
    В текстовом редакторе нужно записать статью в текстовом виде и сохранить.
     
    Пока так.

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    Сам-себе отвечу, итого:

     

    Ремонт костыля №3:

    Чтобы отключить добавление тегов при выводе записи, нужно добавить фильтр в functions.php :

    /* Отключаем добавление тегов <p></p> к записям при выводе */ remove_filter( 'the_content', 'wpautop' ); 

     
    Ремонт костыля №2:
    Для того, чтобы Вордпресс отображал в HTML-редакторе все теги и сохранял в БД записи вместе со всеми тегами, нужно в файл functions.php темы дописать следующее:

    function customize_tinymce_settings($mceInit) { // Отключает функцию очистки от тегов <p></p> при переключении редактора в HTML-режим       $mceInit['wpautop'] = false;                            return $mceInit;}add_filter( 'tiny_mce_before_init', 'customize_tinymce_settings' );

    Ремонт костыля №1:
    Там, где не нужно обрамление тегами <p></p>, обернуть содержимое в блок <div></div>.

    Для удобства можно определить свой список стилей блоков, для этого в ранее созданую функцию customize_tinymce_settings дописать:

    // Новый список стилей блоков$mceInit['block_formats'] = 'Абзац <p>=p;Блок <div>=div;Заголовок <h2>=h2;Заголовок <h3>=h3;Pre <pre>=pre;Код <code>=code;';

    d5e93b880dae.png

     

    Теперь, выделяя нужный фрагмент, можно присвоить ему обрамление div вместо p .

    Изменено пользователем Солнцеворот

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах
    wwt    608
    wwt
    Раз у него таких команд не встречается, значит он их и не поймет.

    не значит. Это может означать лишь то что по умолчанию они не прописаны. Читайте документацию по TinyMCE там уж точно это должно быть.

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    Создайте аккаунт или войдите в него для комментирования

    Вы должны быть пользователем, чтобы оставить комментарий

    Создать аккаунт

    Зарегистрируйтесь для получения аккаунта. Это просто!

    Зарегистрировать аккаунт

    Войти

    Уже зарегистрированы? Войдите здесь.

    Войти сейчас

    • Войти через Facebook
    • Войти через Twitter
    • Войти через Microsoft
    • Войти через LinkedIn
    • Войти через Google