webentwicklung-frage-antwort-db.com.de

Gibt es die Funktion un-wp_autop?

Ich habe ein Problem mit WP, das Ihre Hilfe benötigt. Einige meiner Beiträge enthalten Inhalte, auf die bereits "wp_autop" -Filter angewendet wurden. Dieser Filter verwandelte alle doppelten Umbruchzeilen in <p> tag. Ich möchte das Gegenteil tun: alle <p>-Tags in doppelte Umbruchzeilen umwandeln.

Hast du irgendwelche Vorschläge? Vielen Dank.

3
Anh Tran

Ich bin gerade in diese Situation geraten. Hier ist eine Funktion, mit der ich wpautop rückgängig gemacht habe. Mir fehlt vielleicht etwas, aber das ist ein guter Anfang:

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;      
}
8
Jason Coleman

Der Filter schreibt nicht in die Datenbank, filtert im Frontend, wenn der Beitrag oder andere Inhalte angezeigt werden. Sie deaktivieren den Filter und schreiben einen eigenen Filter, um Ihr benutzerdefiniertes Markup festzulegen.

2
bueltge

Ich brauchte auch eine Möglichkeit, um dies zu tun, war aber mit den vorhandenen Lösungen nicht zufrieden und entschied mich, eine zu entwickeln. Hoffe es hilft jemandem.

<?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+)*(?:>(.*)<\/\1>|\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
        )
    );

}

https://Gist.github.com/fjarrett/ecddd0ed419bb853e390

Bonus: Hiermit können Sie möglicherweise auch feststellen, ob der Inhalt von wpautop geändert wurde.

$is_wpautop = ( $content !== fjarrett_unautop( $content ) );
2
Frankie Jarrett

Es gibt eine integrierte Funktion in WordPress, aber JavaScript wird nur ausgelöst, wenn Sie im Post-Editor von Visual zu HTML wechseln (und es ist wirklich fehlerhaft, wenn HTML tatsächlich verwendet wird). Wenn es sich nur um normalen Inhalt handelt (nicht um HTML-Code), können Sie jeden Beitrag einfach bearbeiten, den Editor hin und her schalten und dann speichern.

Dies ist wahrscheinlich der arbeitsintensivste, aber sicherste Weg.

0
WraithKenny