PHPackages                             humanmade/hm-content-import - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. humanmade/hm-content-import

ActiveWordpress-plugin[Utility &amp; Helpers](/categories/utility)

humanmade/hm-content-import
===========================

Migration framework for WordPress

2.2.0(8mo ago)2935.3k↓25.8%7[36 issues](https://github.com/humanmade/hm-content-import/issues)[4 PRs](https://github.com/humanmade/hm-content-import/pulls)1GPL-2.0-or-laterPHPPHP &gt;=7

Since Mar 4Pushed 8mo ago20 watchersCompare

[ Source](https://github.com/humanmade/hm-content-import)[ Packagist](https://packagist.org/packages/humanmade/hm-content-import)[ RSS](/packages/humanmade-hm-content-import/feed)WikiDiscussions main Synced 2d ago

READMEChangelog (5)Dependencies (1)Versions (13)Used By (1)

HM Content Import
=================

[](#hm-content-import)

Migration framework for WordPress, attempts to reduce overhead in migrating content from differing data sources

Introduction
------------

[](#introduction)

HMCI is an extensible, performant, scriptable, pausable, resumable, and horizontally scalable WP-CLI framework for importing large amounts of content into WordPress. It is a base framework for performing custom migrations of large amounts of content from any source and therefore requires the development of an import handler for each type of content being imported.

It typically supports both new imports and delta imports, although this is dependent on the individual import handlers written for each migration.

HMCI can be run in multiple threads in parallel, making it horizontally scalable in order to reduce the time required to process large imports. It has been used as the basis of large data migrations for Human Made clients such as The Sun, L'Express, Capgemini, and others.

Ingestion
---------

[](#ingestion)

HMCI supports ingestion of data via iterators that support:

- Single files
    - CSV
    - JSON
- Directories of files
    - JSON
    - XML
- A direct MySQL database connection
- WordPress Posts (for internal migration)

Insertion
---------

[](#insertion)

HMCI supports inserting imported data into:

- WordPress
    - Attachments
    - Comments
    - Guest Authors (used by Co-Authors Plus and PublishPress)
    - Posts
    - Taxonomy Terms
    - Users
- Files
    - CSV

Importing
---------

[](#importing)

See the [Running Imports](./docs/running-imports.md) for more information on how to import data.

Writing Importers
-----------------

[](#writing-importers)

See the [Writing Importers](./docs/writing-importers.md) for more information on how to write importers.

Migrating From Version 1
------------------------

[](#migrating-from-version-1)

In Version 2 we changed the way canonical IDs are stored. This means that you will need to migrate your existing data to the new format, if you are planning to resume / to delta imports with data that was imported under Version 1.

Run the following SQL query to migrate your existing data:

```
UPDATE wp_postmeta SET meta_key = CONCAT('hmci_canonical_id_', meta_value) WHERE meta_key = 'hmci_canonical_id';
UPDATE wp_usermeta SET meta_key = CONCAT('hmci_canonical_id_', meta_value) WHERE meta_key = 'hmci_canonical_id';
UPDATE wp_commentmeta SET meta_key = CONCAT('hmci_canonical_id_', meta_value) WHERE meta_key = 'hmci_canonical_id';
UPDATE wp_termmeta SET meta_key = CONCAT('hmci_canonical_id_', meta_value) WHERE meta_key = 'hmci_canonical_id';
```

Should you need to revert this migration, you can run the following SQL query:

```
UPDATE wp_postmeta SET meta_key = 'hmci_canonical_id' WHERE meta_key LIKE 'hmci_canonical_id_%';
UPDATE wp_usermeta SET meta_key = 'hmci_canonical_id' WHERE meta_key LIKE 'hmci_canonical_id_%';
UPDATE wp_commentmeta SET meta_key = 'hmci_canonical_id' WHERE meta_key LIKE 'hmci_canonical_id_%';
UPDATE wp_termmeta SET meta_key = 'hmci_canonical_id' WHERE meta_key LIKE 'hmci_canonical_id_%';
```

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance40

Moderate activity, may be stable

Popularity40

Moderate usage in the ecosystem

Community27

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 54.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~485 days

Recently: every ~602 days

Total

6

Last Release

254d ago

Major Versions

1.1.1 → 2.0.02024-07-10

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/208434?v=4)[John Blackbourn](/maintainers/johnbillion)[@johnbillion](https://github.com/johnbillion)

![](https://www.gravatar.com/avatar/f1d0ffccdc5d339ff98a91e1b224a0d92f93dc8c2f772124473a76655b83129c?d=identicon)[joehoyle](/maintainers/joehoyle)

---

Top Contributors

[![tcrsavage](https://avatars.githubusercontent.com/u/907521?v=4)](https://github.com/tcrsavage "tcrsavage (84 commits)")[![goldenapples](https://avatars.githubusercontent.com/u/665992?v=4)](https://github.com/goldenapples "goldenapples (19 commits)")[![shadyvb](https://avatars.githubusercontent.com/u/451892?v=4)](https://github.com/shadyvb "shadyvb (18 commits)")[![joehoyle](https://avatars.githubusercontent.com/u/161683?v=4)](https://github.com/joehoyle "joehoyle (14 commits)")[![mikeselander](https://avatars.githubusercontent.com/u/3021494?v=4)](https://github.com/mikeselander "mikeselander (8 commits)")[![johnbillion](https://avatars.githubusercontent.com/u/208434?v=4)](https://github.com/johnbillion "johnbillion (6 commits)")[![kadamwhite](https://avatars.githubusercontent.com/u/442115?v=4)](https://github.com/kadamwhite "kadamwhite (2 commits)")[![roborourke](https://avatars.githubusercontent.com/u/23417?v=4)](https://github.com/roborourke "roborourke (1 commits)")[![rmccue](https://avatars.githubusercontent.com/u/21655?v=4)](https://github.com/rmccue "rmccue (1 commits)")[![svandragt](https://avatars.githubusercontent.com/u/594871?v=4)](https://github.com/svandragt "svandragt (1 commits)")

### Embed Badge

![Health badge](/badges/humanmade-hm-content-import/health.svg)

```
[![Health](https://phpackages.com/badges/humanmade-hm-content-import/health.svg)](https://phpackages.com/packages/humanmade-hm-content-import)
```

###  Alternatives

[helsingborg-stad/municipio

A bootstrap theme for creating municipality sites.

4028.5k10](/packages/helsingborg-stad-municipio)[mediawiki/maps

Adds various mapping features to MediaWiki

84152.3k3](/packages/mediawiki-maps)[starcitizentools/citizen-skin

A beautiful, usable, responsive MediaWiki skin with in-depth extension support. Originally developed for the Star Citizen Wiki.

3376.6k](/packages/starcitizentools-citizen-skin)[civicrm/civicrm-drupal-8

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

19251.4k3](/packages/civicrm-civicrm-drupal-8)[altis/core

Core module for Altis

19228.0k3](/packages/altis-core)[pfefferle/wordpress-activitypub

The ActivityPub protocol is a decentralized social networking protocol based upon the ActivityStreams 2.0 data format.

5721.7k4](/packages/pfefferle-wordpress-activitypub)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
