Остановите WordPress, автоматически добавив теги <br> для публикации контента

26

Есть ли способ запретить WordPress автоматически вставлять <br>теги при добавлении возвратов в текстовом редакторе WordPress.

Я хотел бы, чтобы он вел себя больше как редактор кода, где я могу структурировать код так, как мне нравится, и сделать его легким для чтения.

Код, который я использую в редакторе:

[one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third]

Я хотел бы структурировать это так, чтобы было легче читать и редактировать:

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

Однако, когда это будет сделано, <br>к содержимому записи будут добавлены невидимые теги, которые испортят макет моей страницы.

mvaneijgen
источник
Вы хотите удалить теги везде или только для этих шорткодов?
She
Пожалуйста, смотрите мой ответ здесь: wordpress.stackexchange.com/questions/55782/…
Chiedo

Ответы:

25

Ответ Шиа не идеален, как во многих случаях:

  • Вы не хотите лишать все <br>, <p>и т. Д. Вы хотите использовать его как поведение по умолчанию для вашего визуального композитора WP, который будет удален с помощью приведенного выше кода
  • Во многих случаях это считается «взломом ядра», поскольку это меняет поведение ядра по умолчанию в WP - например, такая вещь не будет передаваться ThemeForest

Как я вижу, у вас в основном проблемы с шорткодами. Правильный способ сделать это - не изменить поведение по умолчанию (взломать ядро), а просто отфильтровать содержимое. Так что просто добавьте фильтр и в переменной передайте массив ваших кодов, которые вы хотите отфильтровать следующим образом:

function the_content_filter($content) {
    $block = join("|",array("one_third", "team_member"));
    $rep = preg_replace("/(<p>)?\[($block)(\s[^\]]+)?\](<\/p>|<br \/>)?/","[$2$3]",$content);
    $rep = preg_replace("/(<p>)?\[\/($block)](<\/p>|<br \/>)?/","[/$2]",$rep);
return $rep;
}
add_filter("the_content", "the_content_filter");

Содержимое внутри будет отфильтровано, и поэтому ваши шорткоды будут свободны <br>, <p>и т. Д., Но другие части содержимого, например стандартный текст в редакторе WP, созданный пользователем, будут по-прежнему иметь полную функциональность WP.

Ссылки:

  1. the_content WP фильтр
  2. Регулярное выражение "переводчик"
  3. присоединиться к функции PHP
  4. preg_replace PHP функция
Borek
источник
Это отлично сработало в моем проекте. Потрясающе, потрясающе, изумительно, блестяще ... Очень хорошо!
arefin2k
@Borek Это потрясающе и, кажется, работает очень хорошо (+1), но чтобы улучшить свой ответ, вы могли бы объяснить, ЧТО это делает? Судя по всему, это удаление <p>и <br>теги рядом one_third и team_memberкороткие номера , но я не совсем уверен (мои навыки Regex, безусловно , не до нуля). Можете ли вы описать, что это делает для нас, и теперь мы можем настроить его для других шорткодов?
dKen
@dKen Он делает именно то, что вы написали. Помимо регулярных выражений, это действительно просто, поскольку содержимое отслеживается встроенным фильтром WP the_content. Нам просто нужно дать контент для фильтрации через функцию, в которой мы указываем, что (блок) и как (респ) фильтровать. Я добавил ссылки, чтобы вы лучше поняли это, проверив каждую функцию и фильтр. Что касается добавления дополнительных шорткодов вам просто нужно расширить массив $ блока, просто добавив имена Шорткодов к нему какjoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Борек
... сказал профессиональный разработчик, молодец. Upvoting.
fusion27
К вашему сведению, это работает только при просмотре страницы. Тем не менее, в вашем редакторе вы все равно можете видеть нежелательные <p> и <br> как обычно.
MarsAndBack
13

wpautop()Функция добавляет <p>и <br>теги к вашему контенту для того , чтобы сохранить разрывы строк. Если вы предпочитаете добавлять эти теги самостоятельно, то можете удалить фильтры, которые применяют эту функцию к содержимому публикации:

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

Если вы хотите сохранить автоматическое создание парагарафа (вставка <p>тегов) и просто удалить дополнительные <br>теги, вы можете использовать этот код:

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

function wpse_wpautop_nobr( $content ) {
    return wpautop( $content, false );
}

add_filter( 'the_content', 'wpse_wpautop_nobr' );
add_filter( 'the_excerpt', 'wpse_wpautop_nobr' );

Посмотрите эту ссылку, если вы не уверены, куда поместить этот код.

карите
источник
3

Установите плагин "Не грызи мою разметку".

Он добавляет опцию флажка на каждую страницу, отключая автоматическую вставку <p>и<br> метки.

Существует также возможность сделать это по всему сайту.

Брент Баккала
источник
1

Вероятно, это текстовый редактор, который вносит беспорядок. Вот что я сделал:

Я использую TinyMCE. В настройках текстового редактора я снял флажок «Прекратить удаление тегов <p>» и «<br />» при сохранении и показать их в редакторе HTML ». Работал на меня.

Свейн Э. Слотт Педерсен
источник
0

Возможно, вы могли бы просто использовать, do_shortcode()если все, что у вас есть в вашем контенте, это шорткоды, если у вас нет другого контента, который нуждается в фильтрах.

Я не знаю контекст, но если вы в цикле:

echo do_shortcode($post->post_content);

Саймон
источник
0

Ответ Борека не сработал для моего варианта использования - написания необработанного HTML.

Для этого я использовал плагин Code Snippets (позволяет легко добавлять произвольные фрагменты PHP, которые запускаются), чтобы создать фрагмент для [html][/html]шорткода. Что хорошо в этом шорткоде, так это то, что он совместим с плагином toggle-wpautop, который позволяет отключить автоматическую вставку тегов <br>и <p>тегов для всего сообщения. Вы можете использовать либо, смешивать и сочетать.

function html_shorttag_filter($content) {
  // Based on: https://wordpress.org/plugins/lct-temporary-wpautop-disable-shortcode/
  $new_content = '';
  $pieces = preg_split('/(\[html\].*?\[\/html\])/is', $content, -1, PREG_SPLIT_DELIM_CAPTURE);
  // don't interfere with plugin that disables wpautop on the entire page
  // see: https://plugins.svn.wordpress.org/toggle-wpautop/tags/1.2.2/toggle-wpautop.php
  $autop_disabled = get_post_meta(get_the_ID(), '_lp_disable_wpautop', true);
  foreach ($pieces as $piece) {
    if (preg_match( '/\[html\](.*?)\[\/html\]/is', $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= $autop_disabled ? $piece : wpautop($piece);
    }
  }
  // remove the wpautop filter, but only do it if the other plugin won't do it for us
  if (!$autop_disabled) {
    remove_filter('the_content', 'wpautop');
    remove_filter('the_excerpt', 'wpautop');
  }
  return $new_content;
}
// idea to use 9 is from: https://plugins.svn.wordpress.org/wpautop-control/trunk/wpautop-control.php
add_filter('the_content', 'html_shorttag_filter', 9);
add_filter('the_excerpt', 'html_shorttag_filter', 9);
Greg
источник
0

Эта функция удаляет только <p>и <br>тег для шорткода.

function bnd_fix_shortcodes_extra_line_break( $content ){
  $array = array (
    '<p>['    => '[',
    ']</p>'   => ']',
    ']<br />' => ']'
  );
  $content = strtr( $content, $array );
  return $content;
}
add_filter('the_content', 'bnd_fix_shortcodes_extra_line_break');
Бурхан Насир
источник
Это также влияет на все случаи , в которых [и ]будут не использованы в качестве части шорткод вызова.
fuxia
0

для тех, кто не знаком с взломом кода или не хочет использовать плагин, вы можете сделать это.

1) скопировать весь текущий код со страниц WP (текстовый редактор) введите описание изображения здесь

2) затем вставьте в блокнот и продолжайте требовать редактирования (добавьте короткий код, HTML-код или CSS-код)

3) Скопировать вставить из блокнота в тот же экран на страницах WP (текстовый редактор)

4) Нажмите кнопку [ОБНОВИТЬ], которая расположена справа от тех же страниц WP, чтобы опубликовать страницы

введите описание изображения здесь

5) Наконец, просмотрите его на сайте

Хитрость здесь в том, что не переключайтесь обратно на [визуальный редактор] для этих конкретных страниц, тогда автоматическое добавление для [p] или [br] больше не произойдет.

ХО ЛИ ПИН
источник
-3

Очень простое решение: не используйте новые строки в редакторе WordPress. Да, новые строки уточняют. Однако в этом случае никакие перерывы не могут быть приемлемо понятными.

JK
источник