Pare o WordPress adicionando automaticamente tags de <br> para publicar conteúdo

26

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

Eu gostaria que ele se comportasse mais como um editor de código, onde eu possa 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]

Gostaria de estruturá-lo assim, para que seja mais fácil ler e editar:

[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, serão <br>adicionadas tags invisíveis ao conteúdo da postagem, o que prejudicará o layout da minha página.

mvaneijgen
fonte
Deseja remover as tags em qualquer lugar ou apenas para esses códigos de acesso?
shea
Por favor, veja minha resposta aqui: wordpress.stackexchange.com/questions/55782/…
Chiedo

Respostas:

25

A resposta do karité não é ideal, como em muitos casos:

  • Você não deseja remover tudo, <br>, <p>etc. Você deseja isso como um comportamento padrão para o compositor visual WP que o código acima excluirá
  • Em muitos casos, é considerado como "hackear o núcleo", pois isso está alterando o comportamento padrão do WP - por exemplo, algo que não será transmitido ao ThemeForest

Como posso ver, você tem problemas principalmente com seus códigos de acesso. A maneira correta de abordar isso não é alterar o comportamento padrão (hackear o núcleo), mas apenas filtrar o conteúdo. Portanto, basta adicionar um filtro e, em uma variável, passar uma matriz de seus códigos de captura que você deseja 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 WP criado pelo usuário - ainda terão a funcionalidade completa do WP.

Referências:

  1. filtro WP the_content
  2. Regex "tradutor"
  3. ingressar na função PHP
  4. função PHP preg_replace
Borek
fonte
Funcionou perfeitamente no meu projeto. Incrível, tremendo, maravilhoso, brilhante ..... Muito excelente!
precisa saber é o seguinte
@Borek Isso é incrível e parece funcionar muito bem (+1), mas para melhorar sua resposta, você pode explicar o que está fazendo? Do ponto de vista das coisas, está removendo <p>e marcando códigos de códigos <br>de perto one_third e team_membercódigos de acesso, mas não tenho exatamente certeza (minhas habilidades em REGEX definitivamente não são adequadas). Você pode descrever o que isso faz para nós e agora podemos configurá-lo para outros códigos de acesso?
dKen 17/02
@dKen Está fazendo exatamente o que você escreveu. Além do regex, é realmente simples, pois o conteúdo é filtrado por um filtro WP embutido the_content. Nós apenas precisamos fornecer o conteúdo para filtrar através da função na qual especificamos o que (bloco) e como (rep) filtrar. Eu adicionei referências para entender melhor isso, verificando cada função e filtro. Como para adicionar mais shortcodes você só precisa para expandir a matriz $ bloco simplesmente adicionando nomes de códigos de acesso a ele comojoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek
... disse o desenvolvedor profissional, muito bem. Voto a favor.
precisa saber é o seguinte
Para sua informação, isso funciona apenas quando a página é visualizada. No entanto, no seu editor, você ainda pode ver <p> e <br> indesejados, como de costume.
MarsAndBack
13

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

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

Se você deseja manter a criação automática de paragaraph (inserindo <p>tags) e apenas remover as <br>tags 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' );

Consulte este link se não tiver certeza de onde colocar esse código.

shea
fonte
3

Instale o plug-in "Não estrague minha marcação".

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

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

Brent Baccala
fonte
1

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

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

Svein E. Slotte Pedersen
fonte
0

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

Não conheço o contexto, mas se você estiver no circuito:

echo do_shortcode($post->post_content);

Simon
fonte
0

A resposta de Borek não funcionou no meu caso de uso, que está escrevendo HTML bruto.

Para isso, usei o plug-in Code Snippets (permite adicionar facilmente snippets PHP arbitrários que são executados) para criar um snippet para um [html][/html]shortcode. O interessante desse código curto é que ele é compatível com o plug - in toggle-wpautop, que permite desativar a inserção automática de tags <br>e <p>em uma postagem inteira. Você pode usar, misturar e combinar.

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
fonte
0

Esta função remove apenas as tags <p>e <br>para o shortcode.

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');
Burhan Nasir
fonte
Também afeta todos os casos em que [e não] são usados ​​como parte de uma chamada de código curto.
fuxia
0

para quem não conhece o código hack ou não deseja usar o plug-in, você pode fazer isso.

1) copie todo o código atual das páginas WP (editor de texto) insira a descrição da imagem aqui

2) cole no bloco de notas e continue a exigir edição (adicione código curto, código html ou código css)

3) Copie e cole do bloco de notas para o mesmo scree nas páginas WP (editor de texto)

4) Pressione o botão [UPDATE], localizado no lado direito das mesmas páginas do WP para publicar as páginas.

insira a descrição da imagem aqui

5) Finalmente, visualize-o no site ao vivo

O truque aqui é não voltar para o [editor visual] para essas páginas em particular, e o acréscimo automático para [p] ou [br] não acontecerá mais.

HO LI Pin
fonte
-3

Uma solução muito simples: Não use novas linhas no editor de wordpress. Sim, novas linhas esclarecem. No entanto, nesse caso, nenhuma interrupção ainda pode ser aceitável.

JK
fonte