Last updated May 8, 2015. Created on March 7, 2014.
Edited by drupalshrek, Ashford. Log in to edit this page.

Purpose: Change a field value in an existing node.

Version: Tested and worked with Drupal 7.26

Note: If you already know the basics of creating a module, skip to Step 4 and Step 5.


Is there a Contributed Module already available that will do what I need? Always ask yourself that question before writing a custom module. The Rules.module will easily change the field value; however, I needed a query to get the field's value. I had read a warning somewhere that said any PHP code used in my Rule would be stored in the database and it was better to write your own module.

Creating modules - a tutorial: Drupal 7.x: If you have never written a module before, start here. This step by step tutorial guides you to create a basic module. I will refer to this tutorial versus repeating previously documented information.

I am a beginner at writing modules and PHP code, please feel free to Edit this Book page to improve the explanation. I think it would be terrific if the more experienced Users would Add a Child Page with an alternative way to reach the same goal.


Example content-type: news
Example module's name: update_news

Step 1 Create the update_news folder and start the php file, update_news.module (Creating Modules tutorial -Getting Started chapter.)

Step 2 Create the file. (Creating Modules tutorial -Telling Drupal about your module chapter.)

Step 3 -Add the basic Help function to your update_news.module. (Creating Modules tutorial -Writing comments and implementing your first hook chapter.)

/* ***************************
 * Admin help -describe what the module does
 **************************** */
function update_news_help($path, $arg) {
  switch (
$path) {
'<p>' . t("Updates fields in News posts") . '</p>';


Step 4 -Add the menu function, if needed. I did not have a common action, such as node published, or a scheduled event to trigger the module. I used this menu to define a URL path to trigger the action.

/* ***************************
* hook_menu displays menu links
* When I go to this page, trigger the function to update_news_now
* and display the results message
 **************************** */
function update_news_menu() {
$items = array();
$items['path-to/update-news-results'] = array(
// Page title
'title' => 'News update completed',
// What this link does
'description' => 'Display the update News results',
'type' => MENU_CALLBACK,
// Name of function to execute
'page callback' => 'update_news_now',
// Who can access this menu item? Select a permission already in your lists.
'access arguments' => array('use the administration toolbar '),


Step 5 -Add the function to update the field value. See the query examples for Drupal 7 posted on

/* ******************************
 * Update the node field
 *  Examples of syntax for different field types to set the values
 *  $node->title[$node->language][0]['value'] = 'the value goes here';
 *  $node->field_for_multi-values[$node->language][ ]['value'] = "apple, banana, orange';
 *  $node->field_for_node_reference[$node->language][0]['nid'] = 3730;
 *  $node->field_for_user_reference[$node->language][0]['uid'] = 5;
 *  $node->field_for_taxonomy_term[$node->language][0]['tid'] = 114;
 **************************** */
function update_news_now(){

// A message to display on screen when the function is finished
$finished_message = 'The Update News module has completed updating the nodes.';
// Your own query to get the node id (nid) and the field value you need
$query = db_select('node', 'N');
$query->Fields('N', array('nid', 'title');
rest of query);

// Execute the query
$result = $query->execute();

// Loop through each row item in the results
foreach ($result as $record) {

// Results from my query are in these variables
    // $record->nid = node to update
    // $record->ref_node = referenced node value

    // Load the node to update
$node = node_load($record->nid);
// Set the field value
$node->field_news_node_reference[$node->language][0]['nid'] = $record->ref_node;
// Optional lines to make this change a new revision
$node->revision = 1;
$node->log = 'This node was programmatically updated on ' . date('c');  
// Save the updated node
// Display the message on the page
return $finished_message;

Looking for support? Visit the forums, or join #drupal-support in IRC.


gl2748’s picture

The link to 'Writing comments and implementing your first hook'
should be:

Ashford’s picture

Thank you for reporting the typo in the link. I edited the text and made the correction.