我在wordpress中更新评论后,评论用p标签包装。
remove_filter( 'pre_comment_content', 'wp_filter_kses');
return wp_update_comment( $data );
我搜索了这个问题和I found that I should remove the wpautop
filter,所以我做了。
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
remove_filter( 'pre_comment_content', 'wp_filter_kses');
return wp_update_comment( $data );
但问题并没有消失。更新后,评论仍包含在<p>
标记中。有谁知道如何解决这个问题?
答案 0 :(得分:1)
保存评论时不会包含评论。在页面上输出注释时,请确保wpautop
过滤器未处于活动状态。如果要在任何地方禁用remove_filter( 'the_content', 'wpautop' );
过滤器,则应将wpautop
直接放在functions.php中,否则应将其放置在与模板中的注释输出相关的代码之前的某处,并在相关代码完成后再次添加
答案 1 :(得分:1)
另一种方法是通过在保存后操纵评论内容。
// you can modify the execution order of this hook
add_action( 'comment_post', 'comment_manipulation', 10, 2 );
function comment_manipulation( $comment_ID, $comment_approved ) {
// you can check for comment approved here
// get the comment data based on ID
$comment = get_comment( $comment_ID, ARRAY_A );
// $comment['comment_content'] is accessible here.
}
然后,您可以只搜索并替换段落标记,并使用数据库中的新内容更新注释。
修改强>
更新了执行所有步骤的代码,但这只会从将来的注释中删除p标记,而不是现有注释。这也是未经测试的,因此您必须仔细检查自己。
add_action( 'comment_post', 'comment_manipulation', 10, 2 );
function comment_manipulation( $comment_ID, $comment_approved ) {
// get the comment data based on ID
$comment = get_comment( $comment_ID, ARRAY_A );
// remove only the first <p> you can find
$new_comment = str_replace( "<p>", '', $comment['comment_content'], 1);
// reverse the string
$reversed = strrev($new_comment);
// remove only the first >p/< you can find (</p> in reverse)
$new_reversed_comment = str_replace( ">p/<", '', $reversed, 1);
// reverse back
$new_comment = strrev($new_reversed_comment);
// let's update comment in database with new content
global $wpdb;
$comment_table = $wpdb->prefix . 'comments';
$wpdb->get_results(
"UPDATE $comment_table
SET comment_content = $new_comment
WHERE comment_ID = $comment_ID"
);
}