Como parar o editor html das tags addig p para códigos de acesso, imagens, etc.

4

Eu sei que isso é abordado como tópicos individuais, mas o que estou procurando é uma única função que impede que <p> tags sejam contornadas pelo editor do Wordpress para códigos de acesso e imagens e também remove vazios <p> tages. exemplo:

  • remover as tags <p> que são agrupadas em códigos de acesso, ou seja, <p>[shortcode]</p>
  • remover tags <p></p> vazias
  • remova as tags <p> com espaço em branco, ou seja, <p> </p> ou <p> </p> etc.
  • remova as tags <p> que são agrupadas em tags <img> , ou seja, <p><img blabla /></p>

Eu tenho usado algumas funções diferentes que usam $content e retira as tags <p> via preg_replace() , mas não consigo descobrir como obter todos os quatro requisitos para trabalhar em uma única função.

Parece ser muita sobrecarga para executar $content através de quatro funções diferentes antes de $content ser exibido.

Você também pode recomendar uma boa fonte para aprender a usar todos os acordos para preg_replace ()?

    
por Jason 30.09.2012 / 21:42

3 respostas

3

1. Filtrando o conteúdo

Este é um filtro de conteúdo de uma função para atender aos quatro requisitos acima:

add_filter( 'the_content', 'strip_some_paragraphs', 20 );
function strip_some_paragraphs( $content ) {

    $content = preg_replace(
        '/<p>(([\s]*)|[\s]*(<img[^>]*>|\[[^\]]*\])[\s]*)<\/p>/',
        '$3',
        $content
    );

    return $content;
}

2. Recursos para expressões regulares

3. O RegEx em 1. explicou

A regex atual é <p>(([\s]*)|[\s]*(<img[^>]*>|\[[^\]]*\])[\s]*)<\/p> - ' denota o início e o fim de uma string, como de costume, / é o delimitador de padrões.

Você mencionou quatro casos em que deseja remover as tags <p> . Então, primeiro, nosso padrão deve começar com uma tag <p> e terminar com a complementar </p> . Isso vale para todos os quatro casos. No interior, queremos permitir que quatro opções diferentes sejam correspondências válidas. Agrupamos essas opções entre colchetes e usamos o caractere pipe | para separá-las. | corresponde a ambos os lados e pode ser agrupado. Você pode pensar nisso como "OR".

Agora, para as opções:

Vamos começar com os espaços em branco. \s indica a classe de caractere de espaço em branco (espaços, tabulações e quebras de linha). Usamos o quantificador de estrela [\s]* para corresponder a zero ou mais da classe de caracteres anterior.
Então, agora, combinamos todas as tags de parágrafo vazias. E por acaso, diminuiu os casos para corresponder a 3 - zero ou mais, cuida de <p></p> e <p> </p> . Nice.

Quanto aos outros dois, agruparemos ambos em [\s]* adicional, para que não apenas <p>[shortcode]</p> , mas também, por exemplo,

<p>
    [shortcode] </p>

é correspondido.
O que resta fazer agora é criar padrões para combinar códigos de acesso e img tags. Aqui nós fazemos uso da negação da classe de caractere. O caret ^ no início de uma classe de caracteres nega isso. Portanto, [^>] corresponde a qualquer caractere que não seja > .
Iniciamos o padrão para as imagens com uma tag de abertura <img e para o shortcode com um colchete \[ . Este último deve ser escapado com uma barra, pois é um caractere especial de regex.
Agora usamos a classe de caractere negada acima mencionada com o quantificador de estrela. [^>]* para o img e [^\]]* para o shortcode, correspondendo tudo menos o respectivo caractere de fechamento. Então, combinamos esse caractere de fechamento uma vez e terminamos.

Portanto, obtemos <img[^>]* para as imagens e \[[^\]]*\] para o shortcode.
Nós os agrupamos em possíveis espaços em branco múltiplos: [\s]*<img[^>]*>[\s]* e [\s]*\[[^\]]*\][\s]*
Agrupar esses dois e adicionar apenas espaços em branco como a primeira opção produz o interior dos parênteses e finalmente agrupamos as tags de parágrafo.

Para a substituição, usamos a referência de referência $3 , que cuida da imagem real e as tags shortcode não desaparecem. Para que os espaços em branco não permaneçam, fizemos dois subgrupos das opções possíveis. Apenas img e shortcode são direcionados pela referência de volta.

4. Sidenote

Esta questão é limítrofe do escopo do WPSE - como é principalmente no PHP & Expressões regulares. Pode ser melhor perguntar no StackOverflow. De qualquer forma, agora é respondido.

    
por Johannes Pille 30.09.2012 / 22:28
0

Acho que remover completamente as tags p é uma prática ruim. Para as tags p vazias, existe uma regra css que você pode usar e que funciona bem. p: vazio {display: none} deve funcionar.

    
por Jamie 30.09.2012 / 21:53
0

você pode usar o filtro shortcode_unautop: enlace

    
por paramir 17.12.2016 / 17:50