Как удалить автоматическое форматирование абзацев ТОЛЬКО для страниц, а не для сообщений (WordPress)

Я уже знаком с этим маленьким трюком для удаления автоматического форматирования абзаца в WordPress:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

... однако добавление этого в functions.php удаляет абзацы для всего сайта. Это не то, чего я хочу, поскольку клиент должен иметь возможность самостоятельно вносить изменения (форматирование абзаца действительно помогает им в сообщениях).

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

Любые идеи? Я могу предоставить больше информации, если это необходимо.

Заранее спасибо!


Изменить:

Плагины, которые я пробовал: Php Exec, Raw HTML, Disable WordPress Autop, PS Disable Auto Formatting, Toggle wpautop


person straubcreative    schedule 26.10.2014    source источник
comment
попытался добавить приведенный выше код в functions.php и на разные страницы тем, а также попробовал множество плагинов, которые, похоже, не могут избавиться от лишних тегов p, включая Disable WordPress AutoP, Toggle AutoP, PHP exec и некоторые другие. Я предполагаю, что это всего лишь пара строк php-кода в funtions.php, где я говорю WordPress удалить автоформатирование только для страниц или, может быть, только для одной страницы? Мысли?   -  person straubcreative    schedule 26.10.2014


Ответы (2)


Вы должны иметь возможность проверить, является ли отображаемый шаблон страницей, используя is_page(), а затем при необходимости запустить фильтр. Мы подключаемся к 'wp_head', чтобы мы могли запустить проверку до вызова the_content.

Пример:

function remove_p_on_pages() {
    if ( is_page() ) {
        remove_filter( 'the_content', 'wpautop' );
        remove_filter( 'the_excerpt', 'wpautop' );
    }
}
add_action( 'wp_head', 'remove_p_on_pages' );
person rnevius    schedule 26.10.2014
comment
Я добавил это в конец моего файла functions.php и не вернул удачи. Я также пытался добавить другой код для захвата страницы по идентификатору, но безуспешно: function remove_p_on_pages() { if (get_the_ID()==94) { remove_filter( 'the_content', 'wpautop' ); remove_filter( 'the_excerpt', 'wpautop' ); } } add_action( 'wp_head', 'remove_p_on_pages' ); - person straubcreative; 26.10.2014
comment
Я проверил свой код, и он работает. Это работает только для настоящих страниц. При желании вы можете заменить is_page на is_front_page(), чтобы использовать его только на главной странице. - person rnevius; 26.10.2014
comment
Извини, чувак, это просто не работает для меня. Бьюсь об заклад, в другой теме это будет работать нормально, так как код выглядит солидно. Я попытался добавить is_front_page is_page и еще несколько, но это не сработает. Единственное, что, кажется, проходит, это исходный бит remove_filter. Я также написал об этом разработчикам темы по электронной почте и очень ценю вашу попытку помочь, спасибо! - person straubcreative; 26.10.2014
comment
Что вы имеете в виду, через что проходит оригинальный remove_filter? Вы должны использовать указанную выше функцию вместо других функций remove_filter() из исходного вопроса. Удачи. - person rnevius; 26.10.2014
comment
Да, я сделал это - я удалил исходную строку remove_filter() при попытке использовать новый блок кода выше (is_page). Я просто имел в виду, что единственным исправлением на данный момент является использование исходного кода в OP, что, как вы знаете, не оптимально. Tx еще раз, извините за путаницу. - person straubcreative; 26.10.2014

Вы можете добавить пользовательскую категорию на нужную страницу, а затем использовать идентификатор категории, чтобы отключить wp_autop.

//no paragraph
function no_auto_paragraph( $atts ){

  $cats = get_the_category();
  $cat  = $cats[0]->cat_ID; 

  if ($cat == 7 ){ //in my case the category is 7
    remove_filter( 'the_content', 'wpautop' );
  }

}

add_action( 'wp_head', 'no_auto_paragraph' );

//no_auto_paragraph END
person axcelleria    schedule 04.01.2017