Зупиніть WordPress автоматично додавати теги для публікації вмісту


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>до вмісту публікації будуть додані невидимі теги, які зіпсують макет моєї сторінки.


Ви хочете видалити теги скрізь або лише для цих штрихкодів?
she

Будь ласка, дивіться мою відповідь тут: wordpress.stackexchange.com/questions/55782/…
Chiedo

Відповіді:


25

Відповідь ши не є ідеальною, як у багатьох випадках:

  • Ви не хочете знімати все з <br>, <p>і т.д.
  • У багатьох випадках це вважається "злому ядра", оскільки це змінює основну поведінку WP за замовчуванням - наприклад, така річ не передаватиметься ThemeForest

Як я бачу, у вас в основному проблеми з шорт-кодами. Правильний спосіб підійти до цього - це не зміна поведінки за замовчуванням (злому ядра), а просто фільтрування вмісту. Тож просто додайте фільтр і в змінну передайте масив своїх shotrcodes, які ви хочете фільтрувати так:

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. Regex "перекладач"
  3. приєднатися до функції PHP
  4. preg_замінити функцію PHP

Це прекрасно спрацювало в моєму проекті. Дивовижний, приголомшливий, дивовижний, блискучий ..... Стільки чудового!
arefin2k

@Borek Це дивовижно і, здається, працює дуже добре (+1), але щоб покращити свою відповідь, ви могли б пояснити, що це робить? З вигляду речей це видалення <p>та <br>теги з близьких one_third та team_memberкоротких кодів, але я не зовсім впевнений (мої навички REGEX напевно не до нуля). Чи можете ви окреслити, що це робить для нас, і тепер ми можемо налаштувати це для інших шорткодів?
dKen

@dKen Це саме те, що ви написали. Крім регулярного виразка, це дуже просто, оскільки вміст перетворюється на вбудований WP-фільтр the_content. Нам просто потрібно дати вмісту фільтрувати через функцію, в якій ми визначаємо, що (блок) і як (повтор) фільтрувати. Я додав посилання, щоб ви краще зрозуміли це, перевіривши кожну функцію та фільтр. Що стосується додавання ще коротких кодів, вам просто потрібно розширити масив $ block, просто додавши до нього імена шорткодів на зразокjoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Борек

... сказав про розробник, молодець. Оголошення.
fusion27

FYI це працює лише при перегляді сторінки. Однак у вашому редакторі ви все ще можете побачити небажані <p> 'і' s ', як завжди.
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

Встановіть плагін "Don't Muck My Markup".

Він додає опцію прапорця на кожну сторінку, де вимикається автоматичне вставлення <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);

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');

Це також впливає на всі випадки , в яких [і ]будуть НЕ використані в якості частини шорткод виклику.
фуксія

0

для тих, хто не знайомий зі злом коду або не хоче використовувати плагін, ви можете це зробити.

1) скопіюйте весь поточний код зі сторінок WP (текстовий редактор) введіть тут опис зображення

2) потім вставте в блокнот і продовжуйте вимагати редагування (додайте короткий код, html-код або код css)

3) Скопіюйте пасту з блокнота в той самий екран на сторінки WP (текстовий редактор)

4) Натисніть кнопку [UPDATE], яка розташована праворуч від тих самих WP-сторінок, щоб опублікувати сторінки

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

5) Нарешті попередньо перегляньте його на прямому сайті

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


-3

Дуже просте рішення: не використовуйте нові рядки в редакторі Wordpress. Так, нові рядки уточнюють. Однак у цьому випадку жодних перерв все ще може бути зрозуміло.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.