Вопрос или проблема
WordPress tinyMCE продолжает добавлять <p>
теги, когда я сохраняю свои пользовательские типы записей в визуальном режиме!
Я искал множество решений, но ничего не работает. Вот решение, которое я нашел, но оно не может остановить wordpress от добавления раздражающих <p>
тегов из моего html-кода:
Javascript:
<script type="text/javascript">
tinyMCE.init({force_p_newlines : false});
</script>
PHP
function tinymce_remove_root_block_tag( $init ) {
$init['wpautop'] = false;
$init['force_p_newlines'] = false;
$init['forced_root_block'] = false;
return $init;
}
add_filter( 'tiny_mce_before_init', 'tinymce_remove_root_block_tag' );
Я не хочу никаких решений, которые используют the_content
хук, потому что это все равно позволяет <p>
тегам находиться внутри текстового редактора wordpress. Пример:
remove_filter ("the_content", "wpautop");
Что еще мне следует использовать, чтобы остановить tinyMCE от вмешательства в html-код, добавляя свои автозаменные <p>
теги?
Я использую это на своих установках, чтобы избавиться от p тегов вокруг изображений:
/*
*
* Удалить раздражающие <p> теги вокруг изображений, создают беспорядок с моим стилем
*
*/
function my_filter_ptags_on_images($content)
{
return preg_replace('/<p>(\s*)(<img .* \/>)(\s*)<\/p>/iU', '\2', $content);
}
add_filter('the_content', 'my_filter_ptags_on_images');
Ответ или решение
К сожалению, проблема с автоматическим добавлением тегов <p>
TinyMCE в WordPress может вызывать много неудобства, особенно если вы работаете с пользовательскими типами записей и требуется сохранить исходную разметку HTML. Давайте подробно рассмотрим, какие подходы вы можете использовать, чтобы решить данную проблему.
Причины проблемы
TinyMCE — это редактор WYSIWYG (What You See Is What You Get), который автоматически добавляет теги параграфов (<p>
) вокруг текста для поддержания структуры контента. По умолчанию WordPress применяет функцию wpautop
, которая обрабатывает текст и автоматически добавляет теги <p>
и <br>
. Этого поведения можно избежать, но для этого потребуются некоторые изменения как в JavaScript, так и в PHP.
Решения
Вы уже предприняли попытки отключить автоматическое формирование тегов <p>
, но они оказались неэффективными. Давайте рассмотрим несколько методов, которые могут помочь:
1. Изменения в конфигурации TinyMCE
Вы можете внести изменения в конфигурацию TinyMCE, чтобы отключить создание новых блоков и вставку тегов <p>
. Используйте следующий код, чтобы модифицировать настройки:
function tinymce_disable_p_tags( $init ) {
$init['wpautop'] = false;
$init['force_p_newlines'] = false;
$init['forced_root_block'] = false;
return $init;
}
add_filter( 'tiny_mce_before_init', 'tinymce_disable_p_tags' );
Этот код добавляется в файл functions.php
вашей темы. Он гарантирует, что при сохранении контента в редакторе не будут добавляться никакие теги <p>
.
2. Удаление тегов <p>
из изображения
Вы упомянули о решении, которое помогает убрать теги <p>
вокруг изображений. Данный подход тоже можно адаптировать для полного удаления этих тегов из контента. Вы можете использовать следующий код:
function my_filter_ptags_on_images($content)
{
return preg_replace('/<p>(\s*)<img(.*?)\/>(\s*)<\/p>/i', '<img$2/>', $content);
}
add_filter('the_content', 'my_filter_ptags_on_images');
Этот фильтр поможет удалить ненужные обертки в виде тегов <p>
вокруг изображений, что позволит вам сохранить чистую разметку.
3. Полная блокировка wpautop
Если вам совершенно не нужны теги <p>
, вы можете удалить фильтрацию wpautop
:
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
Этот код уберёт автоматическое добавление тегов параграфа из всего контента. Однако вы упомянули, что не хотите использовать этот метод, так как это касается также елементов текста в редакторе.
Заключение
Каждое из предложенных решений может помочь решить проблему с ненужными тегами <p >
в вашем контенте WordPress. Если ваши попытки отключить их посредством стандартных настроек не работают, возможно, стоит также проверить наличие конфликтов с плагинами или темами, которые могут переопределять настройки TinyMCE.
Попробуйте предложенные изменения, и, возможно, вы сможете достичь желаемого результата, сохранив вашу разметку HTML в ее первоначальном виде.