Copying a node to a new type

Thu, 10/21/2010 - 09:55 -- John Locke

Drupal provides powerful tools that makes it easy to do all sorts of changes to your web site, but one change is difficult: changing the content type of a node after you've created it.

In general, once you create an item of a certain type, you cannot change that type without breaking it. But for one project, we needed to do exactly that.

We wanted to split one content type into two, and move the additional video, photo, and text fields over to the new type while keeping certain fields on the old type. And I came up with a quick way of accomplishing this task, thanks to Views Bulk Operations. Here's how.

  1. Create a VBO view and make "Execute arbitrary PHP Scripts" one of the operations.
  2. Select the nodes you want to change in the view.
  3. Use the following snippet to make the change:
unset ($object->nid); // this makes a copy of each node, instead of updating the existing one
$object->type = 'segment'; // Use the machine name of the new type
$object->comment = 0; // While we're at it, turn comments off
node_save($object);

That's it!

The above snippet will save all fields that are in both the old and the new content type, and ignore the data of any field that's not in your new type.

Of course, using PHP is a risky thing to do if you don't know what you're doing -- it's easy to destroy data if you're not careful. This type of operation should only be done after you have a solid backup, and not by novices. If you'd like our assistance, we're happy to help!

Story Type: 

Add new comment

  1. I wanted to touch base and thank you for your team’s quality work on the FHCRC eagle-i connection project.  The system is live and in production – pushing our Drupal content automatically to Harvard’s system.

    We’re very grateful for all the efforts your crew put into this project! Freelock is on my speed dial for future projects!

    Ann Marie Clark
    Fred Hutchinson Cancer Research Center

Need More Freelock

       

About Freelock

We are located in Pioneer Square, in downtown Seattle. 83 Columbia Street #401 Seattle, WA 98104  USA [P] 206.577.0540 Contact Us/Directions | Site Map Get Updates ©1995-2014 Freelock Computing