如何停止在p标签中包装注释

时间:2016-01-02 07:25:44

标签: wordpress

我在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>标记中。有谁知道如何解决这个问题?

2 个答案:

答案 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"
    );
}