PHPackages                             hellonico/wp-cli-fixtures - 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. hellonico/wp-cli-fixtures

ActiveWp-cli-package[Utility &amp; Helpers](/categories/utility)

hellonico/wp-cli-fixtures
=========================

Easily generate fake data for WordPress

0.5.1(11mo ago)10213.6k↓78.1%18[3 issues](https://github.com/nlemoine/wp-cli-fixtures/issues)GPL-3.0+PHPPHP ^8.0CI failing

Since Nov 24Pushed 11mo ago4 watchersCompare

[ Source](https://github.com/nlemoine/wp-cli-fixtures)[ Packagist](https://packagist.org/packages/hellonico/wp-cli-fixtures)[ Docs](https://github.com/nlemoine/wp-cli-fixtures)[ RSS](/packages/hellonico-wp-cli-fixtures/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (2)Dependencies (7)Versions (15)Used By (0)

wp-cli-fixtures
===============

[](#wp-cli-fixtures)

[![GitHub Workflow Status](https://camo.githubusercontent.com/6209bbaf910bd2ab67435eccd3e2140c5527744ca1c8834ffd2794bb78fab109/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f6e6c656d6f696e652f77702d636c692d66697874757265732f54657374696e673f7374796c653d666c61742d737175617265)](https://github.com/nlemoine/wp-cli-fixtures/actions/workflows/testing.yml?query=branch%3Amaster+workflow%3ATesting)[![Packagist Downloads](https://camo.githubusercontent.com/5ab652b840f8405759676a8d6ca4e8a752eaf31231fd980c622a241da45ecbc7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f68656c6c6f6e69636f2f77702d636c692d66697874757265733f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/5ab652b840f8405759676a8d6ca4e8a752eaf31231fd980c622a241da45ecbc7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f68656c6c6f6e69636f2f77702d636c692d66697874757265733f7374796c653d666c61742d737175617265)[![Packagist PHP Version Support](https://camo.githubusercontent.com/87b5cfc5e318d7eaaa3ec5621516464730abb328c54792c64ee3cdecc9ded2bc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f68656c6c6f6e69636f2f77702d636c692d66697874757265733f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/87b5cfc5e318d7eaaa3ec5621516464730abb328c54792c64ee3cdecc9ded2bc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f68656c6c6f6e69636f2f77702d636c692d66697874757265733f7374796c653d666c61742d737175617265)

Inspired by [Faker](https://github.com/trendwerk/faker), this package provides an easy way to create massive and custom fake data for your WordPress installation. This package is based on [nelmio/alice](https://github.com/nelmio/alice) and [fzaninotto/Faker](https://github.com/fzaninotto/Faker). Please refer to these packages docs for advanced usage.

[![wp-cli-fixtures demo](https://camo.githubusercontent.com/c75c79091595e4c68b7d52ae2d404bfa58ae8398e7b51d3bdd3a48b987827fd5/68747470733a2f2f68656c6c6f6e69636f2e73332e65752d776573742d312e616d617a6f6e6177732e636f6d2f6465762f77702d636c692d66697874757265732e676966)](https://camo.githubusercontent.com/c75c79091595e4c68b7d52ae2d404bfa58ae8398e7b51d3bdd3a48b987827fd5/68747470733a2f2f68656c6c6f6e69636f2e73332e65752d776573742d312e616d617a6f6e6177732e636f6d2f6465762f77702d636c692d66697874757265732e676966)

**WARNING:** This package is mostly intented to be used for development purposes. Use it at your own risk, don't run it on a production database or make sure to back it up first.

Quick links: [Install](#install) | [Usage](#usage) | [Contribute](#contribute)

Install
-------

[](#install)

```
wp package install git@github.com:nlemoine/wp-cli-fixtures.git
```

Requires PHP `^7.3`.

Usage
-----

[](#usage)

### Create fixtures

[](#create-fixtures)

At the root of your project, create a `fixtures.yml` file (you can download it [here](https://raw.githubusercontent.com/nlemoine/wp-cli-fixtures/master/examples/fixtures.yml)):

```
#
# USERS
#
Hellonico\Fixtures\Entity\User:
  user{1..10}:
    user_login (unique):  # '(unique)' is required
    user_pass: 123456
    user_email:
    user_url:
    user_registered:
    first_name:
    last_name:
    description:
    role:
    meta:
      phone_number:
      address:
      zip:
      city:
    acf:
      facebook_url:
      twitter_url:

#
# ATTACHMENTS
#
Hellonico\Fixtures\Entity\Attachment:
  default (template): # templates can be extended to keep things DRY
    post_title:
    post_date:
    post_content:
  images{1..15} (extends default):
    file:  #  is required, image() is the default faker provider and gets images from lorempixel.
  pics{1..15} (extends default):
    file:  # Alternatively we provide a picsum() provider which uses picsum for images. It's quicker but doesn't support image categories.
  documents{1..2} (extends default):
    file:
  custom_images{1..10} (extends default):
    file:

#
# TERMS
#
Hellonico\Fixtures\Entity\Term:
  category{1..10}:
    name (unique):  # '(unique)' is required
    description:
    parent: '50%? ' # 50% of created categories will have a top level parent category
    taxonomy: 'category' # could be skipped, default to 'category'
  tag{1..40}:
    name (unique):  # '(unique)' is required
    description:
    taxonomy: post_tag
  places{1..4}: # custom taxonomy
    name (unique):  # '(unique)' is required
    description:
    taxonomy: place
    acf:
      address:
      zip:
      city:
      image: '@custom_images*->ID'

#
# POSTS
#
Hellonico\Fixtures\Entity\Post:

  # TEMPLATE
  default (template):
    post_title:
    post_date:
    post_content:
    post_excerpt:
    meta:
      _thumbnail_id: '@attachment*->ID'

  # POSTS
  post{1..30} (extends default):
    # 'meta' and 'meta_input' are basically the same, you can use one or both,
    # they will be merged, just don't provide the same keys in each definition
    meta:
      _thumbnail_id: '@attachment*->ID'
    meta_input:
      _extra_field:
    post_category: '3x @category*->term_id' # post_category only accepts IDs
    tax_input:
      post_tag: '5x @tag*->term_id'
      # post_tag: '5x  # Or tags can be dynamically created

  # PAGES
  page{contact, privacy}:
    post_title:
    post_type: page

  # CUSTOM POST TYPE
  product{1..15}:
    post_type: product
    acf:
      # number field
      price:
      # gallery field
      gallery: '3x @attachment*->ID'
      # oembed field
      video: https://www.youtube.com/watch?v=E90_aL870ao
      # link field
      link:
        url: https://www.youtube.com/watch?v=E90_aL870ao
        title:
        target: _blank
      # repeater field
      features:
        - label:
          value:
        - label:
          value:
        - label:
          value:
      # layout field
      blocks:
        - acf_fc_layout: text_image
          title:
          content:
          image: '@attachment*->ID'
        - acf_fc_layout: image_image
          image_left: '@attachment*->ID'
          image_right: '@attachment*->ID'

#
# COMMENTS
#
Hellonico\Fixtures\Entity\Comment:
  comment{1..50}:
    comment_post_ID: '@post*->ID'
    user_id: '@user*->ID'
    comment_date:
    comment_author:
    comment_author_email:
    comment_author_url:
    comment_content:
    comment_agent:
    comment_author_IP:
    comment_approved: 1
    comment_karma:
    # 'meta' and 'comment_meta' are basically the same, you can use one or both,
    # they will be merged, just don't provide the same keys in each definition
    comment_meta:
      some_key:
    meta:
      another_key:

#
#  NAV MENUS
#
Hellonico\Fixtures\Entity\NavMenu:
  header:
    name: header
    locations:
      - header
      - footer

#
#  NAV MENUS ITEMS
#
Hellonico\Fixtures\Entity\NavMenuItem:
  custom_menu:
    menu_item_url:
    menu_item_title:
    menu_id: '@header->term_id'
  categories{1..3}:
    menu_item_object: '@category*'
    menu_id: '@header->term_id'
  posts{1..3}:
    menu_item_object: '@post*'
    menu_id: '@header->term_id'
  page:
    menu_item_object: '@page*'
    menu_id: '@header->term_id'
```

The example above will generate:

- 10 users
- 15 attachments
- 10 categories
- 40 tags
- 30 posts with a thumbnail, 3 categories and 5 tags
- 10 pages
- 15 custom post types named 'product'
- 50 comments associated with post and user
- 1 nav menu
- 6 nav menu items

**IMPORTANT:** Make sure referenced IDs are placed **BEFORE** they are used.

Example: `Term` or `Attachment` objects **must** be placed before `Post` if you're referencing them in your fixtures.

### Load fixtures

[](#load-fixtures)

```
wp fixtures load

```

You can also specify a custom file by using the `--file` argument:

```
wp fixtures load --file=data.yml

```

### Delete fixtures

[](#delete-fixtures)

```
wp fixtures delete

```

You also can delete a single fixture type:

```
wp fixtures delete post

```

Valid types are `post`, `attachment`, `comment`, `term`, `user`.

### Add fake data to existing content

[](#add-fake-data-to-existing-content)

`wp-cli-fixtures` allows you to add/update content to existing entities by passing the ID as a constructor argument.

Add/update data to post ID 1:

```
Hellonico\Fixtures\Entity\Post:
  my_post:
    __construct: [1] # Pass your post ID as the constructor argument
    post_title: ''
    post_content: ''
    post_excerpt: ''
```

Add/update data to 10 random existing posts:

```
Hellonico\Fixtures\Entity\Post:
  post{1..10}:
    __construct: [] # Use a custom formatters to return a random post ID as the constructor argument
    post_title: ''
    post_content: ''
    post_excerpt: ''
```

### Entities

[](#entities)

#### Post

[](#post)

`Hellonico\Fixtures\Entity\Post` can take any parameters available in [`wp_insert_post`](https://developer.wordpress.org/reference/functions/wp_insert_post/#parameters) + `meta` and `acf` key.

*Note: `post_date_gmt` and `post_modified_gmt` have been disabled, there are set from `post_date` and `post_modified`.*

#### Attachment

[](#attachment)

`Hellonico\Fixtures\Entity\Attachment` can take any parameters available in [`wp_insert_attachment`](https://developer.wordpress.org/reference/functions/wp_insert_attachment/#parameters) + `meta`, `file` and `acf` custom keys.

*Note: `parent` must be passed with `post_parent` key.*

#### Term

[](#term)

`Hellonico\Fixtures\Entity\Term` can take any parameters available in [`wp_insert_term`](https://developer.wordpress.org/reference/functions/wp_insert_term/#parameters) + `meta` and `acf` custom keys.

*Note: `term` and `taxonomy` must be respectively passed with `name` and `taxonomy` key.*

#### User

[](#user)

`Hellonico\Fixtures\Entity\User` can take any parameters available in [`wp_insert_user`](https://developer.wordpress.org/reference/functions/wp_insert_user/#parameters) + `meta` and `acf` custom keys.

#### Comment

[](#comment)

`Hellonico\Fixtures\Entity\Comment` can take any parameters available in [`wp_insert_comment`](https://developer.wordpress.org/reference/functions/wp_insert_comment/#parameters) + `meta` custom key.

`comment_date_gmt` has been disabled, it is set from `comment_date`.

#### Nav menu

[](#nav-menu)

`Hellonico\Fixtures\Entity\NavMenu` is a term just like `Hellonico\Fixtures\Entity\Term`. It takes an addiotional `locations` parameter to set the menu location.

```
Hellonico\Fixtures\Entity\NavMenu:
  header:
    name: header
    locations:
      - header
```

#### Nav menu item

[](#nav-menu-item)

`Hellonico\Fixtures\Entity\NavMenuItem` takes the same parameters as `$menu_item_data` in [`wp_update_nav_menu_item`](https://developer.wordpress.org/reference/functions/wp_update_nav_menu_item/#parameters)

*Note 1: replace dashes with underscore in keys (e.g. `menu-item-object` becomes `menu_item_object`).*

*Note 2: `menu-item-object` can also accept an entity object, if so, `menu-item-type` and `menu-item-object-id` will be filled automatically with appropriate values*

### ACF Support

[](#acf-support)

Each ACF supported entity (post, term, user) can have an `acf` key, which works just like `meta`.

```
Hellonico\Fixtures\Entity\Post:
  post{1..30}:
    post_title:
    post_date:
    acf:
      # number field
      number:
      # repeater field
      features:
        - label:
          value:
        - label:
          value:
        - label:
          value:
```

Be careful with duplicate field keys, if you have multiple field with the same key, prefer using ACF field key (`field_948d1qj5mn4d3`).

### MetaBox Support

[](#metabox-support)

#### MetaBox Custom Fields

[](#metabox-custom-fields)

MetaBox fields can be adressed using the `meta` key

```
Hellonico\Fixtures\Entity\Post:
  post{1..30}:
    post_title:
    post_date:
    meta:
      # number field
      number:
      meta_box_custom_field:
```

#### MetaBox Relationships ()

[](#metabox-relationships-httpsdocsmetaboxioextensionsmb-relationshipsusing-code)

When using the MB Relationships extension, the relationships can be set/defined using the key `mb_relations`. For each relationship you want to create a fixture for, you use the relationship-ID which is used to register the MB-relation

```
 MB_Relationships_API::register( [
        'id'   => 'post_to_term',
        'from'   => 'post',
        'to' => [
            'object_type' => 'term',
            'taxonomy'=> 'custom_term'
        ],

    ] );
```

and the post/term ID of the object you want it to have a relationship with.

```
Hellonico\Fixtures\Entity\Post:
  post{1..30}:
    post_title:
    post_date:
    mb_relations:
      post_to_term: '1x @custom_term*->term_id'
      post_to_post: '1x @custom_post*->ID'
```

### Custom formatters

[](#custom-formatters)

In addition to formatters provided by [fzaninotto/Faker](https://github.com/fzaninotto/Faker#formatters), you can use custom formatters below.

#### `postId($args)`

[](#postidargs)

Returns a random existing post ID. `$args` is optional and can take any arguments from [`get_posts`](https://developer.wordpress.org/reference/functions/get_posts/#parameters)

Example:

```

```

#### `attachmentId($args)`

[](#attachmentidargs)

Returns a random existing attachment ID. `$args` is optional and can take any arguments from [`get_posts`](https://developer.wordpress.org/reference/functions/get_posts/#parameters)

Example:

```

```

#### `termId($args)`

[](#termidargs)

Returns a random existing term ID. `$args` is optional and can take any arguments from [`get_terms`](https://developer.wordpress.org/reference/functions/get_terms/#parameters)

Example:

```

```

#### `userId($args)`

[](#useridargs)

Returns a random existing user ID. `$args` is optional and can take any arguments from [`get_users`](https://developer.wordpress.org/reference/functions/get_users/#parameters)

Example:

```

```

#### `fileContent($file)`

[](#filecontentfile)

Returns the content of a file.

Example:

```

```

#### `fileIn($src, $target, false)`

[](#fileinsrc-target-false)

Wrapper around [file provider](https://github.com/fzaninotto/Faker#fakerproviderfile) because some Faker providers [conflicts with PHP native ](https://github.com/nelmio/alice/blob/master/doc/getting-started.md#symfony). Returns file path or file name in a directory (`$src` relative to `fixtures.yml`).

Default target is the WordPress `uploads`.

Example:

```

```

#### Tips

[](#tips)

While playing with fixtures, the [database command](https://github.com/ernilambar/database-command) package can be useful to reset database faster than `wp fixtures delete` and start over.

Contribute
----------

[](#contribute)

This package follows PSR2 coding standards and is tested with Behat. Execute `composer run test` to ensure your PR passes.

> You will need to run `composer run prepare-tests` before your first run.

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance50

Moderate activity, may be stable

Popularity40

Moderate usage in the ecosystem

Community19

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 84.1% 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 ~355 days

Recently: every ~721 days

Total

10

Last Release

354d ago

PHP version history (3 changes)0.1.0PHP ^7.0

0.4.0PHP ^7.3 || ^8.0

0.5.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/62f16c9d375343e12eb02b2a3095dc9a02047287b5f12f75ef4c59929fcb2802?d=identicon)[n5s](/maintainers/n5s)

---

Top Contributors

[![nlemoine](https://avatars.githubusercontent.com/u/2526939?v=4)](https://github.com/nlemoine "nlemoine (74 commits)")[![dansmart-box](https://avatars.githubusercontent.com/u/112491271?v=4)](https://github.com/dansmart-box "dansmart-box (6 commits)")[![jphilung](https://avatars.githubusercontent.com/u/8882848?v=4)](https://github.com/jphilung "jphilung (3 commits)")[![VanwildemeerschBrent](https://avatars.githubusercontent.com/u/29630705?v=4)](https://github.com/VanwildemeerschBrent "VanwildemeerschBrent (3 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (2 commits)")

---

Tags

fakefake-contentfixtureswordpresswp-cliwp-cli-package

### Embed Badge

![Health badge](/badges/hellonico-wp-cli-fixtures/health.svg)

```
[![Health](https://phpackages.com/badges/hellonico-wp-cli-fixtures/health.svg)](https://phpackages.com/packages/hellonico-wp-cli-fixtures)
```

###  Alternatives

[verbb/formie

The most user-friendly forms plugin for Craft.

101400.6k78](/packages/verbb-formie)[solspace/craft-freeform

The most flexible and user-friendly form building plugin!

54686.7k25](/packages/solspace-craft-freeform)[blackfire/player

A powerful web crawler and web scraper with Blackfire support

49517.1k](/packages/blackfire-player)[blair2004/nexopos

The Free Modern Point Of Sale System build with Laravel, TailwindCSS and Vue.js.

1.2k2.4k](/packages/blair2004-nexopos)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

265.2k](/packages/aedart-athenaeum)[directorytree/dummy

4310.9k](/packages/directorytree-dummy)

PHPackages © 2026

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