¿Existe la función un-wp_autop?

2

Tengo un problema con WP que necesita tu ayuda. Algunas de mis publicaciones ya tienen contenido que se aplicó a los filtros "wp_autop". Este filtro convirtió todas las líneas de doble ruptura en la etiqueta <p> . Quiero lo contrario: convertir todas las etiquetas <p> en líneas de doble ruptura.

¿Tienes alguna sugerencia? Gracias.

    
pregunta Anh Tran 20.12.2010 - 08:17

4 respuestas

7

Me acabo de encontrar con esta situación. Aquí hay una función que solía deshacer wpautop. Puede que me esté perdiendo algo, pero este es un buen comienzo:

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;      
}
    
respondido por el Jason Coleman 03.03.2011 - 00:59
2

El filtro no escribe en la base de datos, filtra en el frontend, cuando ve la publicación u otro contenido. Desactiva el filtro y escribe un filtro propio para configurar su marca personalizada.

    
respondido por el bueltge 20.12.2010 - 11:34
0

Hay una función incorporada en WordPress, pero JavaScript solo se activa cuando cambias de Visual a HTML en el editor de publicaciones (y es realmente defectuoso si se usa HTML) Si solo se trata de contenido de publicación normal (no de código html), puede editar cada publicación, cambiar el editor de un lado a otro y luego guardar.

Esta es probablemente la forma más laboriosa, pero más segura.

    
respondido por el WraithKenny 31.05.2012 - 17:19
0

También necesitaba una forma de hacer esto, pero no estaba contento con ninguna de las soluciones existentes, así que decidí hacer una. Espero que ayude a alguien.

<?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

Bonificación: También podría usar esto para determinar si el contenido ha sido alterado por wpautop .

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

Lea otras preguntas en las etiquetas