web-dev-qa-db-ja.com

特定のコンテンツタイプのすべてのノードを削除する方法

特定のコンテンツタイプのノードが数千あります。 Webインターフェース(example.com/admin/content)を使用すると、一度に削除できるのは約50個だけです。どうすればすばやく削除できますか?

33
Greg

そのためのモジュールがあります(TM)。

一括削除 を参照してください。

これは、Batch APIを使用してノードを削除し、node_delete_multiple()への1回の呼び出しで数千のノードを削除するときのタイムアウトまたはメモリの問題を回避します。

一括削除は破棄されたモジュールです。代替案については、以下を参照してください。

33
Berdir

インスピレーションを得るためにDevel Generateモジュールを見てみましょう。これが「コンテンツキル」関数です _devel_generate_content_kill_

_function devel_generate_content_kill($values) {
  $results = db_select('node', 'n')
              ->fields('n', array('nid'))
              ->condition('type', $values['node_types'], 'IN')
              ->execute();
  foreach ($results as $result) {
    $nids[] = $result->nid;
  }

  if (!empty($nids)) {
    node_delete_multiple($nids);
    drupal_set_message(t('Deleted %count nodes.', array('%count' => count($nids))));
  }
}
_

したがって、Devel Generateを使用してすべてのノードを削除し、新しいノードは作成しないか、example.com/devel/phpを使用してdevel_generate_content_kill(array('node_types' => array('my_node_type')));を直接呼び出すかのいずれかを試みます。

27
tim.plunkett

Drupal 8では、1つの方法は EntityStorageInterface :: delete() メソッドで entityQuery() メソッドを使用することです:

$result = \Drupal::entityQuery("node")
    ->condition("type", "YOUR_CONTENT_TYPE_NAME")
    // If the update is being executed via drush entityQuery will only
    // return the content uid 0 have access to. To return all set
    // accessCheck to false since it defaults to TRUE. 
    ->accessCheck(FALSE)
    ->execute();

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);

他のフィルター/条件を適用する必要がある場合は、 QueryInterface インターフェースページを確認できます。

[〜#〜] edit [〜#〜](その他の方法 @ 4k4 ):

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);

あなたがコードをテストしたいなら、あなたは使うことができます:

drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'

これにより、すべての記事が削除されます。

19

純粋にUIから実行する場合は、devel_generateモジュールを使用できます。

  1. 「設定」(admin/config/development/generate/content)の「Generate Content」メニューに移動します。
  2. 削除するコンテンツタイプを選択します。
  3. 「新しいコンテンツを生成する前にこれらのコンテンツタイプのすべてのコンテンツを削除する」の横のチェックボックスがオンになっていることを確認してください。
  4. 生成するノードの数を「0」に設定します。

この方法では、ノードは生成されず、選択したタイプのすべてのノードが削除されます。

13
areynolds

これを行うには、Drupal 7で、Execute PHPを使用して、Develモジュールのコード部分を入力します。

$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
  node_delete($record->nid);
}
10
Colin Shipton

drupalインストールのルートに以下のコードでファイルを作成し、ファイルを実行します。

<?php
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

  $aquery= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'company'");
  while ($row = db_fetch_object($aquery)) {
    node_delete($row->nid);
  }
?>
10
Satya

Drushと delete all モジュールを使用する場合は、ターミナルでこれを実行します。

 drush delete-all [content-type-machine-name]


Examples:
 drush delete-all article             Delect all article nodes.
 drush delete-all all                 Delete nodes of all types.
 drush delete-all --reset             Delete nodes of all types, and reset node, revision and comment counters.
 drush delete-all users               Delete users.

Options:
 --reset                              Reset counter for node, revision and comment tables.
 --roles                              pick roles
8
shrish

ビューの一括操作では、BatchAPI対応の構成可能なノード管理画面が提供され、タイプによるフィルタリング、検索条件に一致するすべてのノードの選択などが可能です。

これは、Drupal 6-での私の実践的な解決策です。バッチ削除のほかに、ノードを一括編集して、他の多くのことを行うことができます。

Drupal 7バージョンはまだ準備ができていないようですが、D7リリースのそのモジュールを監視しています。

5
Darren Petersen

Develモジュールで、drushを使用:

drush genc 0 --types=article --kill

または、ここで説明されているUIで: http://befused.com/drupal/delete-nodes-devel

4
sunzu

別のスニペットは次のとおりです。

$query = db_query("SELECT n.nid FROM {node} n WHERE n.type = 'TO_BE_DELETED'"); 
while ($n = db_fetch_object($query)) 
{
     node_delete($n->nid); 
} 

どこ TO_BE_DELETEDは、削除するコンテンツタイプです。

4
Tangurena

私は すべて削除 モジュールを使用しています。これはD8で正常に動作し、非常に便利なDrushコマンドを提供します。たとえば、articleコンテンツタイプのすべてのコンテンツを削除するには:

drush delete-all article  
3
gerzenstl

すべて削除 モジュールを試し、「admin/content/delete_content」に移動すると、特定のコンテンツタイプに属するコンテンツを削除するためのフォームが表示されます。

よろしく

1
Oleg Videnov

このモジュールは、サイトからすべてのコンテンツやユーザーを削除するために使用されます。これは主に開発者ツールであり、いくつかのケースで役立ちます。

https://www.drupal.org/project/delete_all

一括削除モジュールがバッチAPIを使用して特定のノードタイプのノードを削除するように。少数のノードには、Views Batch Operationsモジュール(VBO)を使用することをお勧めします。ただし、10000ノードを削除する必要がある場合は、このモジュールの方が適している場合があります。

https://www.drupal.org/project/bulkdelete

0
onlink

Migrateモジュールを有効にしている場合は、以下を使用できます。

$ drush migrate-wipe <content-type>

Drushを使用した典型的な移行コマンド を参照してください。

0
jiv-e

コンテンツタイプのすべてのノードをプログラムで削除します。ここにヘルパー関数があります。


function _delete_all_nodes_of_type($type = '') {
  // Return all nids of nodes of type.
  $nids = db_select('node', 'n')
    ->fields('n', array('nid'))
    ->condition('n.type', $type)
    ->execute()
    ->fetchCol(); // returns an indexed array
  if (!empty($nids)) {
    node_delete_multiple($nids);
    drupal_set_message(format_plural(count($nids), count($nids) . ' node Deleted.', count($nids) . ' nodes Deleted.'));
  }
}
0
berramou