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(10mo ago)10213.5k↓77.8%19[3 issues](https://github.com/nlemoine/wp-cli-fixtures/issues)GPL-3.0+PHPPHP ^8.0CI failing

Since Nov 24Pushed 10mo 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 yesterday

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

48

—

FairBetter than 93% of packages

Maintenance54

Moderate activity, may be stable

Popularity39

Limited adoption so far

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

308d 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.

102393.6k69](/packages/verbb-formie)[solspace/craft-freeform

The most flexible and user-friendly form building plugin!

54681.3k18](/packages/solspace-craft-freeform)[blackfire/player

A powerful web crawler and web scraper with Blackfire support

49617.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)[directorytree/dummy

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

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

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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