Pare o WordPress adicionar automaticamente br tags para postar conteúdo

22

Existe uma maneira de impedir que o WordPress insira automaticamente as tags <br> ao adicionar retornos no editor de texto do WordPress.

Eu gostaria que ele se comportasse mais como um editor de código, onde eu posso estruturar o código como eu gosto e facilitar a leitura.

O código que estou usando no editor é:

[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]

Eu gostaria de estruturá-lo dessa forma para facilitar a leitura e a edição:

[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]

No entanto, quando isso acontecer, haverá tags <br> invisíveis adicionadas ao conteúdo da postagem, o que prejudicará o layout da minha página.

    
por mvaneijgen 16.01.2014 / 23:03
fonte

8 respostas

24

A resposta por carité não é ideal como em muitos casos:

  • Você não quer tirar tudo de <br>, <p> etc. Você quer isso como um comportamento padrão para o seu compositor visual do WP, que o código acima excluirá
  • Em muitos casos, é considerado como "hackear o núcleo", pois isso está mudando comportamento padrão do núcleo do WP - por exemplo, tal coisa não passará no ThemeForest

Como posso ver, você tem problemas com códigos de acesso. O jeito certo de abordar isso não é mudar o comportamento padrão (hackear o núcleo), mas apenas filtrar o conteúdo. Então apenas adicione um filtro e em uma variável passe uma matriz de seus shotrcodes que você quer filtrar assim:

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

O conteúdo interno será filtrado e, portanto, seus códigos de acesso estarão livres de <br>, <p> etc., mas as outras partes do conteúdo - por exemplo, texto padrão no editor do WP criado pelo usuário - ainda terão a funcionalidade completa do WP. / p>

Referências:

  1. o filtro WP do contentor
  2. Regex "tradutor"
  3. junte-se à função PHP
  4. preg_replace função PHP
por Borek 17.01.2014 / 20:24
fonte
13

A função wpautop() adiciona <p> e <br> tags ao seu conteúdo para preservar as quebras de linha. Se você preferir adicionar essas tags sozinho, poderá remover os filtros que aplicam essa função ao conteúdo da postagem:

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

Se você quiser manter a criação automática de paragaraph (inserindo <p> tags) e apenas remover as tags <br> adicionais, use este código:

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

Veja este link se você não tiver certeza de onde colocar este código.

    
por shea 17.01.2014 / 05:18
fonte
2

Instale o plug-in "Don't Muck My Markup".

Ele adiciona uma opção de caixa de seleção a cada página, desativando a inserção automática das tags <p> e <br> .

Há também uma opção para fazer isso em todo o site.

    
por Brent Baccala 23.11.2016 / 00:19
fonte
1

Provavelmente é o editor de texto que faz uma bagunça. Foi o que eu fiz:

Eu uso o TinyMCE. Nas configurações do editor de texto, desmarcou "Parar de remover o" < p > "e" < br / > "tags ao salvar e mostrá-las no editor de HTML". Trabalhou para mim.

    
por Svein E. Slotte Pedersen 20.09.2016 / 09:28
fonte
0

Talvez você possa simplesmente usar do_shortcode() se tudo o que você tem em seu conteúdo são códigos de acesso, desde que você não tenha nenhum outro conteúdo que precise dos filtros.

Eu não sei o contexto, mas se você estiver no circuito:

echo do_shortcode($post->post_content);

    
por Simon 17.11.2015 / 23:37
fonte
0

A resposta de Borek não funcionou para o meu caso de uso, que é escrever HTML bruto.

Para isso eu usei o plugin Trechos de código (permite adicionar facilmente trechos PHP arbitrários que são executados) para criar um snippet para um [html][/html] shortcode. O que é legal sobre este shortcode é que ele é compatível com o toggle-wpautop <br> e <p> em uma postagem inteira. Você também pode usar mix & jogo.

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);
    
por Greg 07.12.2016 / 20:41
fonte
-1

Abordagem alternativa que usei: uma classe de utilitário js. Útil, se você não se sentir como mex com regex em todo o conteúdo.

Tenha uma classe (como por exemplo, 'no-breaks') no elemento pai:

<div class="no-breaks"> 
    ...content that is run through a wpautop here...
</div>

Em seguida, em js, use-o para eliminar essas tags br:

// zap all the br tags wpautop adds
$('.no-breaks').find('br').remove();
    
por yuvilio 07.08.2018 / 22:04
fonte
-3

Uma solução muito simples: não use novas linhas no editor de wordpress. Sim, novas linhas esclarecem. No entanto, neste caso, nenhum intervalo ainda pode ser compreensivelmente compreensível.

    
por J.K. 05.12.2015 / 12:51
fonte