Frage

Ich habe ein Problem mit WP, das Ihre Hilfe benötigt. Einige meiner Beiträge haben Inhalte, die bereits "wp_autop" -Filter angewendet wurden. Dieser Filter verwandelte alle doppelten Unterbrechungslinien in <p> Schild. Ich möchte das Gegenteil: Alle drehen <p> Tag in doppelte Bruchlinien.

Haben Sie Vorschläge? Vielen Dank.

War es hilfreich?

Lösung

Ich bin gerade in diese Situation gestoßen. Hier ist eine Funktion, mit der ich WPAUTOP rückgängig gemacht habe. Mir fehlt vielleicht etwas, aber dies 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;      
}

Andere Tipps

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

Ich brauchte auch eine Möglichkeit, dies zu tun, war aber nicht zufrieden mit vorhandenen Lösungen, also beschlossen, einen zu machen. 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: Sie können dies auch verwenden, um festzustellen, ob der Inhalt von geändert wurde durch wpautop.

$is_wpautop = ( $content !== fjarrett_unautop( $content ) );

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

Dies ist wahrscheinlich der arbeitsintensivste, aber sicherste Weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top