如何使用Drush删除节点或节点列表?


8

我发现了Delete all模块,它使您能够删除给定内容类型的所有节点。但是,使用此模块不能删除单个节点或节点列表。

在问题“ 我可以使用Drush删除给定内容类型的节点吗? ”中,我找到了2条有关该命令的答案,drush node_delete <nid>但找不到此命令。

我在关于node_delete()讨论中发现一些使用eval来完成此任务的代码,但它使用eval:

drush php-eval "global \$user; \$user = user_load(1); node_delete(nid);"

如果没有实现此功能的功能,那么实现此功能的更好方法是什么:在Drush模块中还是创建一个新模块?

Answers:


6

如果使用Drush Entity模块,则可以运行drush entity-delete node 123从站点删除nid 123的操作。

编辑:如果有人需要使用该drush entity-delete命令,应使用该模块的开发版本:https : //www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


谢谢格雷格,您总是在忙于处理草皮的东西;-)
阿德里安·西德·

我在drush实体模块中发现了一个不允许删除节点的错误,稍后我将提交补丁。
Adrian Cid Almaguer16年


补丁已提交,如果有人需要使用此drush entity-delete命令,则此时应使用Drush Entity模块的开发版本drupal.org/project/drush_entity/releases/7.x-5.x-dev
Adrian Cid Almaguer

7

最后,我创建了自己的名为 drush_delete

drush_delete.drush.inc文件中放入以下代码:

<?php
/**
 * @file
 * The Drush Delete drush commands.
 */

/**
* Implements hook_drush_command().
*/
function drush_delete_drush_command() {
  $items['node-delete'] = array(
    'description' => dt("Delete nodes."),
    'aliases' => array('nd'),
    'arguments' => array(
      'nids' => dt('The nids of the nodes to delete'),
    ),
    'examples' => array(
      'drush node-delete 1' => dt('Delete the node with nid = 1.'),
      'drush node-delete 1 2 3' => dt('Delete the nodes with nid = 1, 2 and 3.'),

    ),
  );
  return $items;
}

/**
 * Callback for the node-delete command
 */
function drush_drush_delete_node_delete() {
  $nids = func_get_args();
  $nids = array_filter($nids, 'is_numeric');
  $nids = array_map('intval', $nids);
  $nids = array_unique($nids);
  $nids = array_values($nids);
  $cant = count($nids);

  if ($cant > 0) {
    node_delete_multiple($nids);

    drush_print(dt("Deleted nodes:"));
    drush_print(implode(' ', $nids));
  }
  else {
    drush_set_error('DRUSH_ERROR_CODE', dt("You must enter at least one nid"));
  }
}

安装模块,运行drush cc drush以清除刷新缓存,并使用如下命令:

要删除节点,请使用:

drush node-delete 1
drush nd 1

要删除多个节点,请使用:

drush node-delete 1 2 3
drush nd 1 2 3

您可以在以下模块中找到该命令:

https://github.com/adrian-cid/drush_commands


6

恕我直言,最简单的方法是使用php-eval:

drush php-eval "node_delete_multiple(array(NODE_ID));"

...

drush php-eval "node_delete_multiple(array(34));"     // for node/34

drush php-eval "node_delete_multiple(array(34, 35));" // for node ids 34 and 35

谢谢,但是我认为,如果您有drush命令,则可以添加可能需要的参数和选项。而且,您可以轻松地添加验证。
阿德里安·西德·阿尔玛格

我喜欢这个答案。无需自定义drush命令。
Johnathan Elmore
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.