Перехват в comment_text (), чтобы добавить окружающий тег - PullRequest
3 голосов
/ 09 апреля 2010

Попытка подключиться к функции comment_text () , предоставляемой Wordpress API, чтобы обернуть вывод каждого комментария в <div>...</div> контейнер. У меня возникает следующая проблема:

Без моего добавленного фильтра вывод comment_text () выглядит следующим образом:

<p>Hello User!</p>
<p>Thank you for your comment.</p>
<p>Stefan</p>

Это хорошо, но, как я уже сказал, я бы хотел, чтобы он был обернут в <div class="comment-text">...</div>. Насколько я знаю, правильным способом было бы добавить фильтр к functions.php моей темы, и я сделал:

function stefan_wrap_comment_text($content) {
    return "<div class=\"comment-text\">". $content ."</div>";
}
add_filter('comment_text', 'stefan_wrap_comment_text');

Как видно из вывода, данный фильтр работает, но он имеет отрицательный побочный эффект для первого абзаца содержимого, как вы можете видеть в следующем примере. Первый абзац должен быть <p>Hello User!</p>, но выглядит так: Hello User!.

<div class="comment-text">
    Hello User!
    <p>Thank you for your comment.</p>
    <p>Stefan</p>
</div>

Есть идеи или намеки, что я делаю не так?

Ответы [ 2 ]

6 голосов
/ 09 апреля 2010

Попробуйте уменьшить приоритет вашей функции, возможно, есть какая-то функция форматирования, которой вы предшествуете.

add_filter('comment_text', 'stefan_wrap_comment_text', 1000);
5 голосов
/ 09 апреля 2010

Ой, просто наткнулся на файл wp-includes/default-filters.php и обнаружил, что к одной функции по умолчанию применяется несколько фильтров:

add_filter( 'comment_text', 'wptexturize'            );
add_filter( 'comment_text', 'convert_chars'          );
add_filter( 'comment_text', 'make_clickable',      9 );
add_filter( 'comment_text', 'force_balance_tags', 25 ); 
add_filter( 'comment_text', 'convert_smilies',    20 );
add_filter( 'comment_text', 'wpautop',            30 );

Последний фильтр с приоритетом 30 вызывает функцию wpautop () , которая используется для замены двойных разрывов строк на <p>...</p>. По умолчанию add_filter () регистрирует новые фильтры с приоритетом 10. Если поменять мой фильтр на последний, выбрав большее число, все работает нормально.

// This doesn't work because default priority is 10:
// add_filter('comment_text', 'stefan_wrap_comment_text');
// Add a lower priority (higher number) to apply this filter at last: 
add_filter('comment_text', 'stefan_wrap_comment_text', 99);
...