Wordpress: пользовательский фильтр the_content удаляет другие фильтры, например: wpautop - PullRequest
1 голос
/ 15 августа 2010

Я впервые играю с фильтрами, так что простите, если это кажется базовым. Я немного погуглил и не могу найти ничего, связанного с моей проблемой, из всего, что я смог найти, это должно работать без проблем. Насколько я понимаю, фильтры, добавленные вручную, работают одновременно с любыми другими фильтрами, которые запускает WordPress автоматически, то есть: создание моего собственного фильтра будет выполняться вместе с фильтрами wpautop и wptexturize по умолчанию для wordpress.

Но по какой-то причине мой добавленный фильтр работает нормально, за исключением того, что теперь wpautop и wptexturize не работают на the_content. После удаления моего пользовательского фильтра из функций фильтры по умолчанию снова срабатывают. Не установлены другие плагины, которые изменяют вывод. Любая помощь будет очень признательна, наряду с любыми общими рекомендациями относительно лучшего способа сделать это, если вы видите что-то не так с моими высказываниями.

function tumblr_chat_post($content) {
global $post;
$content = $post->post_content;
if ($post->post_type == 'post') {
    $postcats = wp_get_object_terms($post->ID, 'category');
    foreach ($postcats as $mycat) {
        if ($mycat->name == "chats") {
            $chatoutput = "<dl class=\"transcript\">\n";
            $split = preg_split("/(\r?\n)+|(<br\s*\/?>\s*)+/", $content);
                foreach($split as $haystack) { 
                    if (strpos($haystack, ":")) {
                        $string = explode(":", trim($haystack), 2);
                        //list($who, $what) = explode(":", $haystack, 2);
                        $who = trim($string[0]);
                        $what = trim($string[1]);
                        $row_class = empty($row_class)? " class=\"alt\"" : "";
                        $chatoutput = $chatoutput . "<dt$row_class><b>$who:</b></dt> <dd><i>$what</i></dd>\n";
                    }
                    else {
                    // the string didn't contain a needle so we will keep it and output it later
                        $no_chatoutput = $no_chatoutput . $haystack . "\n";
                    }
                }
                // print our new formated chat post and push unformatted content to the end of the post.
                $content = $chatoutput . "</dl>\n" . $no_chatoutput;
                return $content;
        } 
        else {
        // I don't exist in the defined category, so no processing is needed
        return $content;
        }
    }
} 
else { 
    // I'm not a regular post, so no processing is needed.
    return $content;
}
}
add_filter( "the_content", "tumblr_chat_post", 20);

1 Ответ

1 голос
/ 15 августа 2010

Вы не передаете уже отфильтрованный $content в свою функцию фильтра (и, следовательно, теряете всю фильтрацию, выполненную до того, как достигнете своей функции). Это должно быть определено так:

function tumblr_chat_post($content) {
   // rest of your logic m'ere
}
...