如何删除特定旧博客帖子中的所有评论?

时间:2011-01-22 作者:Jeff Atwood

我正在清理一个旧的、有争议的博客条目,我需要删除帖子中的所有评论。

令人惊讶的是,我在现有的WordPress(3.0.4)UI中找不到这样做的方法。

我当然可以浏览并点击所有200多条评论中的“垃圾”,但这似乎。。过分的有没有其他方法可以做到这一点,我错过了?

6 个回复
最合适的回答,由SO网友:edelwater 整理而成

对于那些害怕SQL的读者来说,这是另一种选择。。。。。。。。。。。。。。。(或者在2011年1月后通过谷歌找到):

等到3.1发布后再执行此操作,然后转到帖子,查看所有评论并批量“移至垃圾桶”:(现在应该随时发布)(http://wordpress.org/about/roadmap/)

(或从下载3.1 RC3http://wordpress.org/download/release-archive/)

示例:

http://edward.de.leau.net/files/bulkremove.png

SO网友:rsman

WordPress不支持逐帖批量管理评论。尽管它在帖子的编辑页面上有一个评论管理部分。正如你所说,你必须在每条评论上点击“垃圾”:

alt text

或者,您可以备份wp\\U comments和wp\\U commentmeta表,并运行以下查询:

查找帖子ID。假设相关ID为X。

SELECT ID from wp_posts WHERE post_type=\'post\' AND post_title=\'Hello world!\' INTO @x; 
添加相关评论元数据以保持完整性:

INSERT INTO wp_commentmeta (comment_id, meta_key, meta_value) SELECT comment_ID, "wp_trash_meta_time", UNIX_TIMESTAMP() FROM wp_comments WHERE comment_post_ID=@x;

INSERT INTO wp_commentmeta (comment_id, meta_key, meta_value) SELECT comment_ID, "wp_trash_meta_status",comment_approved FROM wp_comments WHERE comment_post_ID=@x;
垃圾所有评论:

UPDATE wp_comments SET comment_approved=\'trash\' WHERE comment_post_ID=@x;

SO网友:MikeSchinkel

你好@Jeff Atwood:

我假设您具有MySQL查询访问权限。这将为URL slug为的博客文章提供所有评论\'your-blog-post\' (如果您使用的是永久链接,那么slug是您帖子URL中的最后一段,即http://example.com/2011/01/foo-bar-baz/ 你的子弹会是\'foo-bar-baz\'):

SELECT * from wp_comments WHERE comment_post_ID IN (
  SELECT ID FROM wp_posts WHERE post_name=\'your-post-slug\'
)
这将为您提供所有注释元数据:

SELECT * from wp_commentmeta WHERE comment_id IN (
  SELECT comment_ID from wp_comments WHERE comment_post_ID IN (
    SELECT ID FROM wp_posts WHERE post_name=\'your-post-slug\'
  )
) 
所以。。。运行这两个命令(但请确保将post\\u name值替换为与您的值相等):

DELETE from wp_commentmeta WHERE comment_id IN (
  SELECT comment_ID from wp_comments WHERE comment_post_ID IN (
    SELECT ID FROM wp_posts WHERE post_name=\'your-post-slug\'
  )
);

DELETE from wp_comments WHERE comment_post_ID IN (
  SELECT ID FROM wp_posts WHERE post_name=\'your-post-slug\'
);
另外,这当然会完全删除它们,但除非你真的想把它们放在垃圾桶里,否则这比把它们移到垃圾桶里要容易得多。

SO网友:Gonçalo Peres

我不建议直接从数据库中删除,因为数据可能有依赖关系,最终可能会导致孤立记录。

使用post ID(将其添加到ADDPOSTID), 保存下面的脚本并将PHP文件添加到WordPress网站的根目录中,以管理员身份登录并直接在浏览器上调用该文件:

<?php

require(\'./wp-load.php\');

if ( current_user_can( \'manage_options\' ) ) {
    if ( $comments = get_comments( array( \'post_id\' => ADDPOSTID ) ) ) {
        foreach ( $comments as $comment ) {
            echo \'<p>Deleting comment \'.$comment->comment_ID.\'</p>\';
            wp_delete_comment( $comment->comment_ID, true );
        }
    } else {
        echo \'<p>No comments found</p>\';
    }
} else {
    echo \'<p>Not allowed</p>\';
}

SO网友:ClemC

如今,最好的解决方案if 您可以安装WP-CLI 在服务器上,将以这种方式使用它:

$ wp comment delete $(wp comment list --post_id={ID})

SO网友:Eric Malalel

这还不够,还必须更新列计数,否则将无法正确显示。以下是多站点安装的示例代码。

try 
{   
    $rowsUpdated = $wpdb->query(
    "
    UPDATE " . $wpdb->prefix . "COMMENTS SET COMMENT_APPROVED=\'trash\' 
    WHERE comment_post_id = " . $post_id
    );
    if ( $rowsUpdated != 0 ) {
        $wpdb->query( 
            "
            UPDATE " . $wpdb->prefix . "POSTS SET COMMENT_COUNT = COMMENT_COUNT - " .  $rowsUpdated . "
            WHERE ID = " . $post_id
        );
    }
}       
catch (Exception $e) 
{ 
    echo( \'Unexpected error while trying to connect to WP database: \' . $e->getMessage() );
}

结束

相关推荐

I can't view or add comments

嘿,那里。我刚刚建立了这个网站。http://www.paledogstudios.com 它工作得很好,只是我似乎看不到过去的评论(这个博客是从blogger导入的)或添加评论。我知道这是代码而不是设置,因为有人告诉我,但他没有进一步帮助我。他说这可能在索引上。php帮助