Просто интересно, способен ли Drush удалять узлы с данным типом контента.
Что-то вроде: $ drush delete-node --type=MyContentType
Если это невозможно, могу ли я создать такой метод ?
Вы можете создать функцию следующим образом:
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);
}
}
Примечание. Вы также можете использовать простой SELECT
запрос, но, поскольку вы работаете с объектами, кажется более разумным / общепринятым использовать EntityFieldQuery .
Это также должно быть довольно легко изменить или добавить аргументы. Вы также можете довольно легко поместить ее в команду Drush - пример того, как это сделать, можно найти в репозитории Drush (см. Раздел «Команды» внизу).
Установите модуль devel и используйте drush для удаления всех узлов,
Вы также можете указать опцию типа
источник
devel_generate
Модуль включен с разви, но должна быть включена сdrush en devel_generate
Genc обычно используется для создания узлов, так что 0 0 в конце говорит это , чтобы не создавать ничего нового, и --kill удалить то , что уже есть.Я думаю, вы можете с помощью приведенной ниже команды
РЕДАКТИРОВАТЬ: Нашел модуль, который делает что-то / связано с вопросом
http://drupal.org/project/delete_all
использование
Drush
drush delete-all
Пример:
drush delete-all article
источник
delete_all
еще не перенесен на Drupal 8 , но ответ genc работает.Примерно так будет работать (не проверено):
Это позволит найти все узлы с типом контента,
Annoucements
используяEntityFieldQuery()
. Затем он получает все$nids
из результата и удаляет их, используяnode_delete_multiple()
.Вы можете взять этот код, поместить его в отдельный файл PHP, а затем выполнить его с помощью
drush scr
.Использование API обеспечит срабатывание всех правильных хуков. Помимо прочего, они также будут удалять ревизии узлов и данные полей (и их ревизии), чтобы у вас не было потерянных данных в базе данных.
источник
Есть несколько хороших идей в этой теме. Если вы не хотите заниматься программированием на самом деле и хотите использовать Drush, вы можете посмотреть на модуль Удалить все :
источник
Drush 9
drush entity:delete node --bundle=my_content_type
источник
VBO имеет интеграцию Drush. Создайте VBO-представление узлов, выполните его через Drush (используя
drush vbo-execute
), передайте тип узла в качестве аргумента.источник
Вы также можете создать сценарий drush (скажем, он называется «bulk_delete.php» и находится в корневой папке Drupal):
Это абсолютно быстрый способ сделать это: прямой запрос к БД с использованием функции Drupal db_delete
Использование:
Документ: https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_delete/7.
Предупреждение: этот процесс не удаляет данные своих полей. В любом случае к этим полям можно применить один и тот же процесс (глядя на столбец «связка» каждого поля). Например:
Где «mycontenttype» - это тот, который использовался в первом запросе.
источник
'nid' > 5000
?Drupal 7
Попробуйте следующую однострочную, она удалит все узлы MyContentType из Drupal:
Или вы можете удалить все объекты на основе имени типа объекта (например, узел):
Примечание:
node
это имя типа вашей сущности, вы можете изменить его при необходимости.Если вы получите ошибки памяти или тайм-аута, вы можете добавить следующие наборы непосредственно перед
$res
:источник
Чтобы удалить все узлы определенного типа контента, вы можете попробовать выполнить следующую команду с помощью drush:
Где MyContentType - это имя типа содержимого вашего компьютера (например, Page).
источник
Для отдельных узлов:
источник
Обновление ответа предоставлено @kenorb.
В Друпале 8
источник
Ты можешь использовать
drush node_delete NID
удалить конкретный узел, но если вы хотите удалить все узлы по типу контента, я думаю, вы можете создать плагин drush, используя пакетный API.источник
Вы также можете сделать это с модулем devel, ответив на вопрос « Могу ли я удалить узлы заданного типа контента с помощью Drush?
Установите модуль devel и используйте drush для удаления всех узлов,
$ drush genc --kill 0 0
Вы также можете указать опцию типа
$ drush genc --kill --types = article 0 0
источник