Existe uma função un-wp_autop?

2

Eu tenho um problema com o WP que precisa da sua ajuda. Algumas das minhas postagens têm conteúdo que já foi aplicado aos filtros "wp_autop". Este filtro transformou todas as linhas de quebra dupla em <p> tag. Eu quero o oposto: transformar todo o tag <p> em linhas duplas de quebra.

Você tem alguma sugestão? Obrigado.

    
por Anh Tran 20.12.2010 / 08:17

4 respostas

7

Acabei de me deparar com esta situação. Aqui está uma função que eu usei para desfazer o wpautop. Eu posso estar perdendo alguma coisa, mas isso é um bom começo:

function reverse_wpautop($s)
{
    //remove any new lines already in there
    $s = str_replace("\n", "", $s);

    //remove all <p>
    $s = str_replace("<p>", "", $s);

    //replace <br /> with \n
    $s = str_replace(array("<br />", "<br>", "<br/>"), "\n", $s);

    //replace </p> with \n\n
    $s = str_replace("</p>", "\n\n", $s);       

    return $s;      
}
    
por Jason Coleman 03.03.2011 / 00:59
2

O filtro não escreve no banco de dados, filtra no frontend, quando visualiza a postagem ou outro conteúdo. Você desativa o filtro e escreve um filtro próprio para definir sua marcação personalizada.

    
por bueltge 20.12.2010 / 11:34
0

Existe uma função incorporada no WordPress, mas o JavaScript só é acionado quando você muda do Visual para HTML no editor de postagem (e é realmente problemático se o html for realmente usado). Se o seu conteúdo de postagem é normal (não código html), você pode simplesmente editar cada postagem, alternar o editor para frente e para trás e, em seguida, salvar.

Esta é provavelmente a maneira mais trabalhosa, mas mais segura.

    
por WraithKenny 31.05.2012 / 17:19
0

Eu também precisava de uma maneira de fazer isso, mas não estava feliz com as soluções existentes, então decidi fazer uma. Espero que ajude alguém.

<?php

/**
 * Replaces paragraph elements with double line-breaks.
 *
 * This is the inverse behavior of the wpautop() function
 * found in WordPress which converts double line-breaks to
 * paragraphs. Handy when you want to undo whatever it did.
 * 
 * @see    wpautop()
 *
 * @param  string $pee
 * @param  bool   $br (optional)
 *
 * @return string
 */
function fjarrett_unautop( $pee, $br = true ) {

    // Match plain <p> tags and their contents (ignore <p> tags with attributes)
    $matches = preg_match_all( '/<(p+)*(?:>(.*)<\/>|\s+\/>)/m', $pee, $pees );

    if ( ! $matches ) {

        return $pee;

    }

    $replace = array( "\n" => '', "\r" => '' );

    if ( $br ) {

        $replace['<br>']   = "\r\n";
        $replace['<br/>']  = "\r\n";
        $replace['<br />'] = "\r\n";

    }

    foreach ( $pees[2] as $i => $tinkle ) {

        $replace[ $pees[0][ $i ] ] = $tinkle . "\r\n\r\n";

    }

    return rtrim(
        str_replace(
            array_keys( $replace ),
            array_values( $replace ),
            $pee
        )
    );

}

enlace

Bônus: Você também pode usar isso para determinar se o conteúdo foi alterado por wpautop .

$is_wpautop = ( $content !== fjarrett_unautop( $content ) );
    
por Frankie Jarrett 26.03.2016 / 22:45