Удалите автоматически добавленную <p> со страницы, которая не имеет литерального содержимого (использует короткие коды)

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

Страница получает эти короткие коды, устанавливая переднюю страницу на статическую страницу и используя the_content (); на странице. Содержимое страницы не содержит пробелов, только короткие коды, поэтому выглядит примерно так:

[content-shortcode blah blah][more content-shortcode blah blah] 

Все работает отлично, за исключением того, что WordPress добавляет пустой <p></p> до кода коротких кодов и еще один P / P в конце всего кода коротких кодов (ничего между короткими кодами).

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

Есть несколько вещей, которые вы можете попробовать.

Вы можете отложить wp_autop потому что он обрабатывает до вывода короткого wp_autop :

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

Или используйте cleanup_shortcode_fix() которая должна помочь в вашей проблеме:

 function cleanup_shortcode_fix($content) { $array = array('<p>[' => '[', ']</p>' => ']', ']<br />' => ']', ']<br>' => ']'); $content = strtr($content, $array); return $content; } add_filter('the_content', 'cleanup_shortcode_fix'); $string = preg_replace_('/<p>s*</p>/', '', $string); add_filter('the_content', 'cleanup_shortcode_fix', 1); 

Попробуйте это (вставьте этот код где-нибудь в functions.php ):

 function shortcode_empty_paragraph_fix($content){ $array = array ( '<p>[' => '[', ']</p>' => ']', ']<br />' => ']' ); $content = strtr($content, $array); return $content; } add_filter('the_content', 'shortcode_empty_paragraph_fix'); 

Существуют различные функции, кроме wpautop() которые фильтруют содержимое сообщения , например force_balance_tags() , которое предназначено для сбалансирования плохого HTML, поступающего через редактор.

Они в основном определяются в файле formatting.php , где вы можете увидеть различный код в источнике.

Удаление этих фильтров может быть таким же простым, как одна строка, как вы указываете:

remove_filter('the_content', 'wpautop');

Для получения дополнительной информации: http://codex.wordpress.org/Function_Reference/wpautop

Посмотрите ниже ссылки, которые помогут вам.

  1. Удаление тегов <p> и <br/> в сообщениях WordPress
  2. WordPress-оберточной шорткоды-с-п-тегов
  3. Отключить плагин wpautop

может это вам помочь.

Поскольку вы хотите удалить только теги <p> на домашней странице, добавьте следующий код в файл functions.php :

 add_action('pre_get_posts', 'remove_autop_from_home'); function remove_autop_from_home() { // check to see if we are on the home page if(is_home()) { remove_filter('the_content', 'wpautop'); } }