Hanya ingin tahu apakah Drush mampu menghapus node dari tipe konten yang diberikan.
Sesuatu seperti: $ drush delete-node --type=MyContentType
Jika tidak memungkinkan, dapatkah saya membuat metode seperti itu?
Anda dapat membuat fungsi seperti berikut:
function MYMODULE_delete_all_the_things() {
$query = new EntityFieldQuery;
$result = $query->entityCondition('entity_type', 'node')
->propertyCondition('type', 'YOUR-CONTENT-TYPE')
->execute();
if (isset($result['node']) && count($result['node'])) {
$node_ids = array_keys($result['node']);
node_delete_multiple($node_ids);
}
}
Catatan - Anda juga bisa menggunakan SELECT
kueri sederhana , tetapi karena Anda bekerja dengan entitas, tampaknya lebih masuk akal / praktik umum untuk menggunakan EntityFieldQuery .
Ini juga harus cukup mudah untuk mengubah atau menambah argumen. Anda juga bisa memasukkannya ke perintah Drush dengan mudah - ada contoh cara melakukannya di repositori Drush (periksa bagian Perintah di dekat bagian bawah).
Instal modul devel, dan gunakan drush untuk menghapus semua node,
Anda juga dapat memberikan opsi jenis,
sumber
devel_generate
modul disertakan dengan devel, tetapi yang perlu diaktifkan dengandrush en devel_generate
Genc biasanya digunakan untuk membuat node, sehingga 0 0 di akhir memberitahu tidak untuk membuat sesuatu yang baru, dan --kill untuk menghapus apa yang sudah ada.Saya kira Anda bisa dengan menggunakan perintah di bawah ini
EDIT: Menemukan modul yang melakukan sesuatu / terkait dengan pertanyaan
http://drupal.org/project/delete_all
Pemakaian
Drush
drush delete-all
Contoh:
drush delete-all article
sumber
delete_all
belum porting ke Drupal 8 , tetapi jawaban genc berfungsi.Sesuatu seperti ini akan bekerja (belum diuji):
Ini akan menemukan semua node dengan tipe konten yang
Annoucements
digunakanEntityFieldQuery()
. Kemudian mendapat semua$nids
dari hasil, dan menghapusnya menggunakannode_delete_multiple()
.Anda dapat mengambil kode ini, memasukkannya ke dalam file PHP yang terpisah, dan kemudian menjalankannya dengan
drush scr
.Menggunakan API akan memastikan bahwa semua kait yang tepat menyala. Di antara hal-hal lain, mereka juga akan menghapus revisi simpul dan data lapangan (dan revisi mereka) sehingga Anda tidak memiliki data yatim di database.
sumber
Ada beberapa ide bagus di utas ini. Jika Anda benar-benar tidak ingin melakukan pemrograman dan ingin menggunakan Drush, Anda dapat melihat pada modul Delete All berkontribusi:
sumber
Drush 9
drush entity:delete node --bundle=my_content_type
sumber
VBO memiliki integrasi Drush. Buat tampilan VBO node, jalankan melalui Drush (menggunakan
drush vbo-execute
), melewati jenis node sebagai argumen.sumber
Anda juga dapat membuat skrip drush (katakanlah itu disebut "bulk_delete.php" dan ditempatkan di bawah folder root Drupal):
Ini benar-benar cara tercepat untuk melakukannya: permintaan langsung ke db, menggunakan fungsi Drupal's db_delete
Pemakaian:
Dokter: https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_delete/7
Peringatan: proses ini tidak menghapus data bidangnya. Bagaimanapun proses yang sama dapat diterapkan ke bidang-bidang ini (melihat kolom "bundel" dari masing-masing bidang). Sebagai contoh:
Di mana "mycontenttype" adalah yang digunakan dalam permintaan pertama.
sumber
'nid' > 5000
?Drupal 7
Coba satu-liner berikut, ini menghapus semua node MyContentType dari Drupal:
Atau Anda dapat menghapus semua entitas berdasarkan nama tipe entitas (mis. Simpul):
Catatan:
node
adalah nama jenis entitas Anda, Anda dapat mengubahnya jika diperlukan.Jika Anda mendapatkan memori atau kesalahan waktu habis, Anda dapat menambahkan set berikut sebelum
$res
:sumber
Untuk menghapus semua node dari jenis konten tertentu, Anda dapat mencoba menjalankan perintah berikut melalui drush:
Di mana MyContentType adalah nama Jenis Konten mesin Anda (misalnya Halaman).
sumber
Untuk masing-masing node:
sumber
Memperbarui jawaban yang diberikan oleh @kenorb.
Di Drupal 8
sumber
Kamu bisa memakai
drush node_delete NID
untuk menghapus node tertentu, tetapi jika Anda ingin menghapus semua node berdasarkan tipe konten saya kira Anda dapat membuat plugin drush menggunakan batch api.sumber
Anda juga dapat melakukan ini dengan modul devel seperti dijawab di Dapatkah saya menghapus node dari jenis konten yang diberikan dengan Drush?
Instal modul devel, dan gunakan drush untuk menghapus semua node,
$ drush genc --kill 0 0
Anda juga dapat memberikan opsi jenis,
$ drush genc --kill --types = artikel 0 0
sumber