/models

WordPress plugin to create custom post types and taxonomies using JSON, YAML or PHP files

Primary LanguagePHPMIT LicenseMIT

Models

Models is a WordPress plugin allowing you to create custom post types and taxonomies using JSON, YAML or PHP files.

You can now set post types and taxonomies using Intervention 2.x.x.

Installation

Composer:

Recommended methods:

Roots Bedrock

$ composer require soberwp/models:1.1.0

Models is a mu-plugin so it doesn't have to be activated.

Roots Sage

$ composer require soberwp/models:1.1.0-p

Manual:

  • Download the zip file
  • Unzip to your sites plugin folder
  • Activate via WordPress

Requirements:

Setup

By default, create folder models/ within the active theme directory.

If you are a Roots Sage the default folder is app/models/

Alternatively, you can define a custom path using the filter below within your themes functions.php file:

add_filter('sober/models/path', function () {
    return get_stylesheet_directory() . '/your-custom-folder';
});

That's it, now go ahead and add model-name.json files, in the folder or subfolders to begin creating your models. Use Unravel to automatically move the config files outside of your theme path for better separation of concerns.

Usage

The data structure follows a similar data structure to WordPress taxonomies and post types arrays, so if an config option is missing from the examples below, follow the developer's reference and place it within "config": {}

If values are not specified, defaults are the same as WordPress defaults.

Additionally, if the Extended CPTs library is available, Models will use it when registering your post types and taxonomies instead allowing extended functionality within your Models.

Extracted examples presented below are in JSON format.

Post Types

Create a custom post type.

Required:

{
  "type": "post-type",
  "name": "book"
}

Basic:

{
  "type": "cpt",
  "name": "book",
  "supports": [
    "title", "editor", "thumbnail"
  ],
  "labels": {
    "has_one": "Book",
    "has_many": "Books",
    "text_domain": "sage"
  }
}

In the above example, "labels": {} are redundant because "Book" and "Books" would have been generated from "name".

Multiple:

[
  {
    "type": "cpt",
    "name": "book",
    "supports": [
      "title", "editor", "thumbnail"
    ]
  },
  {
    "type": "cpt",
    "name": "album",
    "supports": [
      "title", "editor", "comments"
    ]
  }
]

All Fields:

Post Type Tips:

  • "active": false stops the post type from being created. Default is set to true.
  • "type": "post-type" also accepts a shorthand "type": "cpt";

Taxonomies

Create a custom taxonomy.

Required:

{
  "type": "taxonomy",
  "name": "genre"
}

Basic:

{
  "type": "tax",
  "name": "genre",
  "links": [
    "post", "book"
  ],
  "labels": {
    "has_one": "Book Genre",
    "has_many": "Book Genres",
    "text_domain": "sage"
  }
}

"links": (string|array) assigns the taxonomy to post types. Defaults to "links": "post"

Multiple:

[
  {
    "type": "category",
    "name": "genre",
    "links": "book"
  },
  {
    "type": "tag",
    "name": "author",
    "links": "book"
  }
]

"type": "category" and "type": "tag" shorthands are explained below under Tips.

All Fields:

Taxonomy Tips:

  • "active": false stops the taxonomy from being created. Default is set to true.
  • "type": "taxonomy" also accepts shorthands;
    • "type": "tax"
    • "type": "category" or "type": "cat" creates a category taxonomy.
    • "type": "tag" creates a tag taxonomy.

Support

Updates

Composer:

  • Change the composer.json version to ^1.0.4**
  • Check CHANGELOG.md for any breaking changes before updating.
$ composer update

WordPress:

Includes support for github-updater to keep track on updates through the WordPress backend.