You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

接手存在垃圾内容的Drupal网站后,如何删除包含特定关键词的所有页面?

嘿,别慌!两种方式都能解决你的问题——先从Drupal后台操作说起,这是更安全的选择,尤其适合刚接触Drupal的你;如果垃圾内容量特别大,再考虑用MySQL批量处理。

方法一:Drupal后台直接操作(推荐新手)

Drupal自带的工具或者轻量模块就能搞定,不用碰数据库:

  • 首先,备份你的网站和数据库!这是无论做什么操作前都不能忘的步骤。
  • 如果你用的是Drupal 7/8/9/10:
    1. 进入后台的「内容」页面(路径一般是 /admin/content)。
    2. 点击页面顶部的「筛选」或「搜索」框,输入你的关键词,选择搜索范围(比如标题、正文),然后应用筛选。
    3. 勾选所有符合条件的内容,在批量操作下拉菜单里选择「删除内容」,点击「执行」即可。
  • 如果筛选功能不够用(比如关键词出现在自定义字段里),可以安装Views模块:
    1. 安装并启用Views模块后,创建一个新的视图,选择显示「内容」。
    2. 添加筛选条件:选择对应字段(比如正文、自定义字段),设置为「包含」你的关键词。
    3. 在视图里添加批量操作按钮,勾选要删除的内容,执行删除即可。

这种方法的好处是Drupal会自动处理所有关联数据(比如内容修订版、评论、关联字段),不会留下垃圾数据。

方法二:通过MySQL直接操作(适合大量内容批量删除)

如果垃圾内容有成百上千条,后台操作太慢,可以直接数据库操作,但务必先备份数据库!操作失误可能导致数据丢失。

假设你的关键词是「垃圾关键词」,按以下步骤操作:

  1. 先查询确认目标内容(避免误删):

    -- 查询包含关键词的节点ID、标题和正文片段
    SELECT n.nid, n.title, SUBSTRING(b.body_value, 1, 100) AS body_preview
    FROM node n
    JOIN field_data_body b ON n.nid = b.entity_id
    WHERE b.body_value LIKE '%垃圾关键词%' OR n.title LIKE '%垃圾关键词%';
    

    执行后确认这些是你要删除的内容。

  2. 删除关联数据(Drupal的内容存在多个关联表,必须逐一清理):

    -- 删除绑定到目标节点的评论(如果有)
    DELETE FROM comment WHERE nid IN (
        SELECT nid FROM node n
        JOIN field_data_body b ON n.nid = b.entity_id
        WHERE b.body_value LIKE '%垃圾关键词%' OR n.title LIKE '%垃圾关键词%'
    );
    
    -- 删除内容的修订版本
    DELETE FROM node_revision WHERE nid IN (
        SELECT nid FROM node n
        JOIN field_data_body b ON n.nid = b.entity_id
        WHERE b.body_value LIKE '%垃圾关键词%' OR n.title LIKE '%垃圾关键词%'
    );
    
    -- 删除正文字段的数据(包括当前版本和修订版本)
    DELETE FROM field_data_body WHERE entity_id IN (
        SELECT nid FROM node n
        JOIN field_data_body b ON n.nid = b.entity_id
        WHERE b.body_value LIKE '%垃圾关键词%' OR n.title LIKE '%垃圾关键词%'
    );
    DELETE FROM field_revision_body WHERE entity_id IN (
        SELECT nid FROM node n
        JOIN field_data_body b ON n.nid = b.entity_id
        WHERE b.body_value LIKE '%垃圾关键词%' OR n.title LIKE '%垃圾关键词%'
    );
    
    -- 最后删除节点本身
    DELETE FROM node WHERE nid IN (
        SELECT nid FROM node n
        JOIN field_data_body b ON n.nid = b.entity_id
        WHERE b.body_value LIKE '%垃圾关键词%' OR n.title LIKE '%垃圾关键词%'
    );
    

    注意:如果你的内容有其他自定义字段,需要替换或添加对应的field_data_*field_revision_*表的删除语句。

  3. 清理缓存:删除完后,回到Drupal后台清空缓存(路径 /admin/config/development/performance),确保前台显示正常。

重要提醒

  • 无论用哪种方法,备份都是第一要务
  • 后台操作虽然慢,但更安全,不会遗漏关联数据;MySQL操作快,但需要熟悉Drupal的数据库结构,否则可能留下无效数据。

内容的提问来源于stack exchange,提问作者Udders

火山引擎 最新活动