Answers:
这种杀死节点的方法非常慢,但最安全
function MYMODULE_menu(){
$items['admin/mymodule/killnodes/%'] = array(
'title' => 'Kill nodes',
'page callback' => 'kill_nodes',
'page arguments' => array(3),
'type' => MENU_CALLBACK,
'access arguments' => array('administer site configuration'),
);
return $items;
}
function kill_nodes($type){
$query = "SELECT node.nid AS nid FROM {node} node WHERE node.type IN ('%s')";
$result = db_query($query, $type);
$count = 0;
while($row = db_fetch_object($result)){
node_delete($row->nid);
$count++;
}
$message = t('!count nodes has been killed. Pif-Paf!', array('!count' => $count));
drupal_set_message($message);
return t("That's all folks");
}
对于用户,您可以通过编程确定要删除的用户吗?如果可能,您可以使用以前的功能作为示例来删除不需要的用户。
如果像我一样,您更喜欢Python方法(也许在这里,但仍然很少使用),这是解决此问题的透明有效的方法:
import os
# Build up a variable containing the usernames
# This list was built using drush sql-cli, then
# SELECT name FROM users
# where $your-where-condition
# order by uid asc
# INTO
# OUTFILE '/tmp/users.csv'
# FIELDS TERMINATED BY ','
# ENCLOSED BY '"'
# lines terminated by ', ' ;
users = [result from SQL goes here]
for user in users:
print("Deleting spam user: %s..." % user),
os.system('drush --yes -r $your-path-to-drupal -l $your-site-url user-cancel --delete-content %s > /dev/null' % user)
print 'Done'
这些步骤基本上是:
drush sql-cli -r $your-path-to-drupal -l $your-site-url
python delete-users.py
我敢肯定有更好的方法可以做到这一点,但这是我被黑的解决方案,效果很好。
for i in `drush sql-query 'SELECT list of usernames'`; do drush --yes user-cancel --delete-content $i; done
。
尝试以下两个D6模块:
用户修剪 https://drupal.org/project/user_prune 和用户删除 https://drupal.org/project/user_delete
使用“用户修剪”,您可以根据您指定的条件来批量删除不活动的用户。
用户删除允许您删除用户并删除所有提交的内容,包括节点和注释
如果您可以访问Drush并需要一种快速的解决方案,该解决方案使您可以将用户列入白名单,并且无需安装其他模块:
drush @example.org sqlq "SELECT name FROM users WHERE name NOT IN ('keepthisuser1', 'andthisuser2')" | while read NAME; do
drush -y @example.org user-cancel $NAME ;
done
在复制粘贴之前,请确保同时调整@example.org
和列表中的用户,以保持('keepthisuser1', 'andthisuser2')
上述状态:)
模块全部删除可以派上用场。
安装后,您可以执行以下操作:
drush delete-all articles
要么
drush delete-all users
Drupal 6版本在开发中,但有注释:
除快速删除外,其他所有操作均应正常进行。
最初的问题是6,但是使用Chris Burgess的答案可以像这样应用到Drupal 8;
drush sqlq "SELECT name FROM users_field_data WHERE name NOT IN ('admin')" | while read NAME;
do drush -y user:cancel --delete-content $NAME;
done
select all
按钮来选择所有页面上的所有项目-单击它并全部杀死!