| 5 node.module | node_delete($nid) |
| 6 node.module | node_delete($nid) |
| 7 node.module | node_delete($nid) |
| 8 node.module | node_delete($nid) |
Delete a node.
File
- modules/
node/ node.module, line 974 - The core that allows content to be submitted to the site. Modules and scripts may programmatically submit nodes using the usual form API pattern.
Code
<?php
function node_delete($nid) {
// Clear the cache before the load, so if multiple nodes are deleted, the
// memory will not fill up with nodes (possibly) already removed.
$node = node_load($nid, NULL, TRUE);
if (node_access('delete', $node)) {
db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
db_query('DELETE FROM {node_access} WHERE nid = %d', $node->nid);
// Call the node-specific callback (if any):
node_invoke($node, 'delete');
node_invoke_nodeapi($node, 'delete');
// Clear the page and block caches.
cache_clear_all();
// Remove this node from the search index if needed.
if (function_exists('search_wipe')) {
search_wipe($node->nid, 'node');
}
watchdog('content', '@type: deleted %title.', array('@type' => $node->type, '%title' => $node->title));
drupal_set_message(t('@type %title has been deleted.', array('@type' => node_get_types('name', $node), '%title' => $node->title)));
}
}
?> Login or register to post comments
Comments
Note that node_delete() calls
Note that node_delete() calls node_load(), which keeps a cache of loaded nodes. That means it's possible to load a node with node_load() which should have been explicitly deleted with node_delete() earlier in the session! In other words, this works:
<?phpnode_delete($nid);
$node = node_load($nid);
?>
There are performance implications to this, and possibly security ones as well. See the node_load() documentation and its comments for information on how to clear node_load()'s cache. Also see this issue in Drupal's issue queue.
Note that node_delete calls
Note that node_delete calls node_access check so cannot be used in some occasions, like when running cron with an anon user.
Or, say, trying to delete a node as anon with drush php-eval "node_delete(nid) ;", however drush php-eval "global \$user; \$user = user_load(1);node_delete(nid) ;" works
For security, it's a good
For security, it's a good practice to restore $user to original state - e.g.
global $user;$original_user = $user;
$user = user_load(1);
node_delete($nid);
$user = $original_user;
Official documentation on how to impersonate a different user
There is official documentation on how to do that.
On that page the afore mentioned method has been explicitly declared unsafe.
See Safely Impersonating Another User