блуждающие элементы <p>

Я закодировал shortcode wordpress для столбцов, которые в основном вставляют html через короткий код. Проблема в том, что wpautop добавляет паразитные элементы p, которые делают код недействительным.

Чтобы проверить, поместите это в ваши functions.php:

function static_col_container($atts, $content) { extract(shortcode_atts(array( 'foo' => 'bar' ), $atts)); $content = do_shortcode($content); $container = '<div class="static-column-container">' . $content . '</div>'; return $container; } add_shortcode('static-cont', 'static_col_container'); function static_col($atts, $content) { extract(shortcode_atts(array( 'space' => '2', 'class' => '' ), $atts)); $content = do_shortcode($content); $column_container = '<div class="static-column static-column-' . $space . ' ' . $class . '">' . $content . '</div>'; return $column_container; } add_shortcode('static-col', 'static_col'); 

Использование:

 [static-cont] [static-col] put some content here... [/static-col] [static-col] put some content here... [/static-col] [/static-cont] 

Я знаю, что WordPress использует wpautop для вставки p-тэгов, которые можно отключить с помощью:

 remove_filter('the_content', 'wpautop'); 

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

Solutions Collecting From Web of "блуждающие элементы <p>"

Удалите фильтр из the_content и запустите его после обработки короткого кода.

Пытаться:

 remove_filter( 'the_content', 'wpautop' ); add_filter( 'the_content', 'wpautop' , 12); 

Обычно короткие коды обрабатываются после того, как wpautop применяется к контенту. См. http://core.trac.wordpress.org/browser/tags/3.1/wp-includes/shortcodes.php#L296.

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

 <div class="static-column-container"><br> <div class="static-column static-column-2 "><br> put some content here…<br> </div><br> <div class="static-column static-column-2 "><br> put some content here…<br> </div><br> </div> 

Переключение между HTML и Visual я всегда вижу.

 [static-cont] [static-col] put some content here... [/static-col] [static-col] put some content here... [/static-col] [/static-cont] 

…и ничего больше..

Плагины установлены, TinyMCE расширен?

У меня была та же проблема, но не с точки зрения валидации, а с точки зрения стиля, где блуждающий прорыв p-тэг разрушал мой CSS.

 $retour ='<div class="testimonial-meta">' $retour .='<h5>'.$testimonial_name.',</h5><span>'.$testimonial_details.'</span>'; $retour .='</div>'; return $retour; 

Вернулся:

 <div class="testimonial-meta"> <h5>John Doe,</h5> <p><span>Company CEO</span></div> </div> 

Я исправил стиль, добавив в свой CSS:

 .testimonial-meta p{ display:inline; } 

Надеюсь, это может быть полезно кому-то.