Есть ли функция автоматического включения un-wp?


У меня проблема с WP, и мне нужна ваша помощь. В некоторых моих сообщениях уже есть контент, к которому были применены фильтры "wp_autop". Этот фильтр превратил все двойные линии разрыва в тег <p>. Я хочу противоположного: превратить все теги <p> в двойные линии разрыва.

У вас есть какие-нибудь предложения? Спасибо.

Author: hakre, 2010-12-20

4 answers

Я только что столкнулся с этой ситуацией. Вот функция, которую я использовал для отмены wpautop. Возможно, я что-то упускаю, но это хорошее начало:

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
Author: Jason Coleman, 2011-03-02 23:59:40

Фильтр не записывается в базу данных, фильтруется на интерфейсе, при просмотре поста или другого контента. Вы деактивируете фильтр и пишете собственный фильтр для установки своей пользовательской разметки.

 2
Author: bueltge, 2010-12-20 10:34:19

Мне также нужен был способ сделать это, но я не был доволен ни одним из существующих решений, поэтому решил его создать. Надеюсь, это кому-то поможет.

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

Бонус: Вы также можете потенциально использовать это, чтобы определить, был ли контент изменен wpautop.

$is_wpautop = ( $content !== fjarrett_unautop( $content ) );
 2
Author: Frankie Jarrett, 2016-03-26 21:45:23

В WordPress есть встроенная функция, но она запускается на JavaScript только при переключении с визуального на HTML в редакторе сообщений (и это действительно глючит, если на самом деле используется html). Если это просто обычный контент публикации (не html-код), то вы можете просто редактировать каждую публикацию, переключать редактор туда и обратно, а затем сохранять.

Это, вероятно, самый трудоемкий, но безопасный способ.

 0
Author: WraithKenny, 2012-05-31 15:19:54