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

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!

Add new comment

The content of this field is kept private and will not be shown publicly.

Filtered HTML

  • Web page addresses and email addresses turn into links automatically.
  • Allowed HTML tags: <a href hreflang> <em> <strong> <blockquote cite> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h1> <h2 id> <h3 id> <h4 id> <h5 id> <p> <br> <img src alt height width>
  • Lines and paragraphs break automatically.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.