New Migrate your forum to wpForo 3.0 AI Edition, the first 360° AI-powered forum platform. See how
Home / Blog / CMS Migration
CMS Migration

How Drupal Content Maps to WordPress: Nodes, Taxonomy, CCK Fields, Views, and Forum

The hardest part of a Drupal to WordPress migration is not the technical process of moving files and database records. It is understanding how Drupal’s content architecture maps to WordPress’s, because the two platforms model content in fundamentally different ways, and a migration that ignores those differences loses structured data silently.

The Core Architecture Difference

Drupal is built on an entity model. Every piece of content is a node, and every node has a type. The fields on that node type are defined using the Field API (or CCK in older Drupal 7 installations). Taxonomies are first-class entities with their own field storage. The architecture is powerful and flexible, but it means a single article in Drupal might have its data spread across a dozen database tables: node, node_revision, field_data_body, field_data_field_image, field_data_field_related_content, field_revision_field_tags, and more.

WordPress uses a simpler model. Content is stored in wp_posts with most core fields (title, content, author, date, status) as columns. Additional structured data is stored in wp_postmeta as key-value pairs. ACF Pro (Advanced Custom Fields) extends this by providing a managed field system that maps fields to post meta records with proper data types. The mapping from Drupal‘s field API tables to WordPress‘s post meta system via ACF is direct but requires explicit per-field configuration for every content type.

The Full Content Mapping Reference

Drupal Element Drupal Storage WordPress Equivalent Notes
Node (article type) node + field_data_* tables WP Post (post_type=post) Body, title, author, date preserved
Node (basic page type) node + field_data_* tables WP Page (post_type=page) Supports full page hierarchy
Custom node type node + custom field_data_* tables Custom Post Type + ACF Pro fields Fields mapped one-to-one
Paragraphs module items paragraphs_item + field_data_* tables ACF Flexible Content / Gutenberg Blocks Complex layouts require per-block rebuild
CCK / Field API fields field_data_field_* tables per field ACF Pro custom fields (wp_postmeta) Date, image, file, text, number all supported
Taxonomy vocabulary taxonomy_vocabulary table Custom taxonomy (register_taxonomy) Hierarchy preserved
Taxonomy term taxonomy_term_data + term_hierarchy WP term (wp_terms + wp_term_taxonomy) Term slugs and parent IDs mapped
Views module (display) views_view table + rendered output WP_Query + custom archive templates Logic must be rebuilt; rendered output not portable
Drupal Forum module forum + comment tables + node type wpForo 360° AI (forum categories + topics) Topics, replies, author attribution preserved
Drupal Webform webform + webform_submitted_data tables Gravity Forms / WPForms Submission history archived
Drupal Comments comment table WP native comments (wp_comments) Author, date, content, parent thread
Drupal User users + users_roles tables WP User (wp_users + wp_usermeta) Roles mapped; passwords require reset on login
User profile fields profile_value (profile2 module) WP user meta via ACF User fields Custom fields mapped explicitly
Managed files / Media file_managed + field_data_field_image WP Media Library (wp_posts type=attachment) Filenames, alt text, captions preserved
URL aliases url_alias table (D7) / path_alias entity WP post slug + Redirection plugin 301s Each alias either becomes slug or a redirect
Metatag module fields metatag table per entity Yoast SEO post meta (_yoast_wpseo_*) Title and description per post
Menu links menu_links table WP navigation menus (wp_nav_menus) Hierarchy and URL targets preserved
Blocks (regions) block table + block_custom WP Widgets + Template parts (PHP) Custom block content rebuilt in theme
Node revisions node_revision + field_revision_* tables WP post revisions Latest published version migrated; history archived
Mapping Drupal content structures to WordPress equivalents
Every Drupal content structure has a WordPress equivalent. The mapping is the work.

Nodes to Posts: The Core Migration

Every piece of content in Drupal is a node. The node type determines which fields are attached and how the content is displayed. In WordPress, the equivalent is a post type: built-in post types (post, page) plus custom post types for any structured content beyond standard articles and pages.

Drupal article nodes map to WordPress posts. Drupal basic page nodes map to WordPress pages, preserving the parent-child hierarchy from the Drupal menu_links table. Custom node types (event, product, staff profile, case study) map to custom post types registered in WordPress with a matching set of ACF Pro fields for every custom field defined in Drupal.

The field values for each node are stored in Drupal‘s field_data_field_* tables. A node with a date field, an image field, and a related content field will have three separate field_data_ tables contributing data to that single node. A proper migration reads each of these tables and writes the values to the corresponding ACF Pro field in WordPress post meta. This is why HTML scraping produces incomplete migrations: the scraped page may show a date and an image, but the underlying structured field values are never written to the WordPress database.

Taxonomy: Vocabularies, Terms, and Hierarchy

Drupal uses vocabularies (named groups of terms) as the taxonomy structure. A vocabulary called “Topics” with terms like “Policy”, “Technology”, and “Healthcare” becomes a custom taxonomy in WordPress with matching terms. The hierarchy of terms (parent terms and child terms defined in Drupal’s taxonomy_term_hierarchy table) is preserved in WordPress‘s term parent relationships.

Free tagging vocabularies (flat, unstructured tag lists) map to WordPress tags or custom taxonomy terms depending on how the vocabulary was used. Controlled vocabularies with hierarchical structure become hierarchical custom taxonomies. The term-to-content relationships stored in Drupal‘s field_data_field_tags and similar tables are recreated as WordPress term-object relationships in wp_term_relationships.

CCK and Field API: Custom Fields to ACF Pro

The Field API (and its predecessor CCK, the Content Construction Kit) is how Drupal extends content types with structured custom fields. A typical Drupal site might have an event content type with a start date field (stored in field_data_field_event_date), a location address field (stored in field_data_field_location), and a speaker reference field linking to another content type.

Each of these maps to an ACF Pro field in WordPress. Date fields become ACF Date Picker fields. Address fields become ACF Group fields with sub-fields for street, city, and country. Post reference fields become ACF Relationship or Post Object fields. The migration reads each field_data_field_* table directly and writes the values to WordPress post meta with the ACF field key prefix that ACF Pro uses to validate field data.

Drupal Forum Module to wpForo

The Drupal Forum module stores discussion content as a special node type with comments as threaded replies. Forum containers (top-level forum categories) are vocabulary terms in a Forum vocabulary. Forum topics are nodes of type “forum”. Replies are Drupal comment entities on those nodes.

All of this maps cleanly to wpForo 360° AI in WordPress. wpForo 360° AI forum categories receive the content from Drupal’s forum container terms. wpForo topics are created from the Drupal forum node data with original author attribution and publication timestamp preserved. wpForo replies are created from the Drupal comment data with original commenter names and dates. The result is a fully functional community forum in WordPress with complete historical content, not a blank forum that asks the community to start over.

Views: The One Thing That Cannot Be Ported

The Views module in Drupal is one of the platform’s most powerful features. It allows site builders to create custom lists, archive pages, and data displays through a graphical query builder without writing PHP. A Views display is a configured query against the Drupal database with a template for the output.

Views configurations cannot be ported to WordPress. The Views query model is specific to Drupal’s entity system. The equivalent in WordPress is a custom WP_Query loop inside a page template or archive template, or a plugin like Views for WP. Each Views display used on the Drupal site must be assessed, and its output rebuilt in WordPress through the appropriate mechanism. This is one of the tasks that requires developer time regardless of which migration approach is used.

Paragraphs: The Flexible Layout Challenge

The Paragraphs module is used extensively on modern Drupal sites to build flexible page layouts. A page built with Paragraphs might contain a text block, an image gallery, a testimonial slider, and a CTA section, each as a different Paragraph type with its own field structure. Paragraph data is stored in paragraphs_item and related field_data_field_paragraphs_* tables.

Paragraphs-based layouts map to ACF Flexible Content in WordPress or to custom Gutenberg blocks. Each Paragraph type becomes a layout row in ACF Flexible Content or a Gutenberg block variant. The field values for each Paragraph instance are read from the Drupal tables and written to the ACF sub-fields. This requires rebuilding the visual output of each Paragraph type as a PHP template partial or Gutenberg block before the content migration runs, so that the imported data has a template to render it.

Drupal content fully mapped to WordPress
Every content layer mapped, every field value accounted for. A migration done at the source level.

What a Database-Level Migration Covers

gConverter migrates Drupal sites by reading the source database directly. Every node type is mapped, every field value is written to the correct ACF Pro target, every taxonomy relationship is preserved, every URL alias becomes either a matching WordPress slug or a 301 redirect, and Drupal Forum content migrates to wpForo 360° AI with full attribution. The Webform submission history is archived. Metatag SEO data is written to Yoast SEO. Media files are imported to the WordPress Media Library with filenames, alt text, and caption data preserved.

Before any access to your database, we sign a Data Processing Agreement. Your credentials are stored in AES-256 encrypted vaults, transferred over TLS 1.3, and all client data is permanently deleted within 30 days of delivery. We are US-registered with full EU GDPR compliance.

Read the data protection documentation →

For everything about why organizations are moving from Drupal to WordPress: Why Businesses Are Moving From Drupal to WordPress →

What Clients Say

Went FAR above and beyond to help us work through this project. We are thrilled with the final result and they were professional, great to work with, and responsive every step of the way. Would highly recommend.

Anna P., Wilmington NC – Customer Lobby, January 2026

Very few conversion issues on the first pass, and they cleaned it right. Very Impressive.

Stacy C., Katy TX – Customer Lobby, November 2025

The Bottom Line

The content in a Drupal site is not a monolithic blob. It is a structured set of entities with typed fields, explicit taxonomy relationships, URL aliases, and SEO metadata, each stored in specific database tables. A migration that reads those tables explicitly and maps each piece of data to the correct WordPress destination produces a site where every structured field is populated, every URL is preserved or redirected, and every community forum post arrives with its author and date intact. A migration that does not do this produces a site that looks complete on the surface while silently missing years of structured content.

Share this post:
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted

Ready to leave your outdated platform behind?

Free quote in 6–12 hours. You pay only after the migration is approved.