特定のコンテンツタイプのノードが数千あります。 Webインターフェース(example.com/admin/content)を使用すると、一度に削除できるのは約50個だけです。どうすればすばやく削除できますか?
インスピレーションを得るために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')));
を直接呼び出すかのいずれかを試みます。
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);'
これにより、すべての記事が削除されます。
純粋にUIから実行する場合は、devel_generateモジュールを使用できます。
この方法では、ノードは生成されず、選択したタイプのすべてのノードが削除されます。
これを行うには、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);
}
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);
}
?>
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
ビューの一括操作では、BatchAPI対応の構成可能なノード管理画面が提供され、タイプによるフィルタリング、検索条件に一致するすべてのノードの選択などが可能です。
これは、Drupal 6-での私の実践的な解決策です。バッチ削除のほかに、ノードを一括編集して、他の多くのことを行うことができます。
Drupal 7バージョンはまだ準備ができていないようですが、D7リリースのそのモジュールを監視しています。
Develモジュールで、drushを使用:
drush genc 0 --types=article --kill
または、ここで説明されているUIで: http://befused.com/drupal/delete-nodes-devel
別のスニペットは次のとおりです。
$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
は、削除するコンテンツタイプです。
私は すべて削除 モジュールを使用しています。これはD8で正常に動作し、非常に便利なDrushコマンドを提供します。たとえば、article
コンテンツタイプのすべてのコンテンツを削除するには:
drush delete-all article
すべて削除 モジュールを試し、「admin/content/delete_content」に移動すると、特定のコンテンツタイプに属するコンテンツを削除するためのフォームが表示されます。
よろしく
このモジュールは、サイトからすべてのコンテンツやユーザーを削除するために使用されます。これは主に開発者ツールであり、いくつかのケースで役立ちます。
https://www.drupal.org/project/delete_all
一括削除モジュールがバッチAPIを使用して特定のノードタイプのノードを削除するように。少数のノードには、Views Batch Operationsモジュール(VBO)を使用することをお勧めします。ただし、10000ノードを削除する必要がある場合は、このモジュールの方が適している場合があります。
Migrateモジュールを有効にしている場合は、以下を使用できます。
$ drush migrate-wipe <content-type>
Drushを使用した典型的な移行コマンド を参照してください。
コンテンツタイプのすべてのノードをプログラムで削除します。ここにヘルパー関数があります。
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.'));
}
}