PHP Classes
elePHPant
Icontem

Corcel (Laravel + WordPress): Use the WordPress backend with any PHP application

Recommend this page to a friend!

  Author Author  
Name: Junior Grossi is available for providing paid consulting. Contact Junior Grossi .
Classes: 1 package by
Country: Brazil Brazil
Age: 33
All time rank: 3390268 in Brazil Brazil
Week rank: 217 Up10 in Brazil Brazil Up
Innovation award
Innovation award
Nominee: 1x

Winner: 1x


  Detailed description   Download Download .zip .tar.gz   Install with Composer Install with Composer  
This package allows using the WordPress backend with any PHP application.

It allows to use WordPress backend (admin panel) with any PHP project.

Originally created to work with Laravel, this package uses que Eloquent ORM to connect you current PHP application to the WordPress database, getting all data you need, without using WordPress classes and methods, allowing to use a entire MVC environment using WordPress as CMS behind the scenes.

Details

Readme Art

Corcel

> This package allows you to use WordPress as backend (admin panel) and retrieve its data using Eloquent, with any PHP project or even framework.

Travis Packagist Packagist Test Coverage

<a href="https://ko-fi.com/A36513JF" target="_blank"> <img height="36" style="border:0px;height:36px;" src="https://az743702.vo.msecnd.net/cdn/kofi4.png?v=0" border="0" alt="Buy Me a Coffee at ko-fi.com" /> </a>

Twitter Follow

Corcel is a collection of classes created to retrieve WordPress database data using a better syntax. It uses the Eloquent ORM developed for the Laravel Framework, but you can use Corcel in any type of PHP project, with any framework, including Laravel.

This way, you can use WordPress as the backend (admin panel), to insert posts, custom types, etc, and you can use whatever you want in the frontend, like Silex, Slim Framework, Laravel, Zend, or even pure PHP (why not?). So, just use Corcel to retrieve data from WordPress.

This make possible to use WordPress as your CMS of choice and using Laravel in the front to create routes, views, controller, and fetch WordPress data using Corcel.

Table of Contents

<a id="install"></a> Installing Corcel

<a id="versions"></a> Version Compatibility

Laravel | Corcel :---------|:---------- 5.1.x | 2.1.x 5.2.x | 2.2.x 5.3.x | 2.3.x 5.4.x | 2.4.x 5.5.x | 2.5.x

<a id="install"></a> Installing Corcel

You need to use Composer to install Corcel into your project:

composer require jgrossi/corcel

Configuring (Laravel)

Now you have to include CorcelServiceProvider in your config/app.php:

'providers' => [
    /*
     * Package Service Providers...
     */
    Corcel\Laravel\CorcelServiceProvider::class,
]

Now configure our config file to make sure your database is set correctly and to allow you to register custom post types and shortcodes in a very easy way:

Run the following Artisan command in your terminal:

php artisan vendor:publish --provider="Corcel\Laravel\CorcelServiceProvider"

Now you have a config/corcel.php config file, where you can set the database connection with WordPress tables and much more.

<a id="changelog"></a> Changelog (v1 to v2)

Namespace change

In Corcel v1 all model classes were located in the Corcel namespace. In v2 all models are located in the Corcel\Model namespace. So if you want to fetch posts using the Post class just use Corcel\Model\Post::all(), for example.

Configuration file and Service Provider class

In Corcel v2 we have now a config file and a Service Provider class. This makes easier to setup the database connection you want to be used by Corcel (the WordPress one).

You can also configure custom post types and shortcodes directly from the config file. This file should be located in config/corcel.php (after publishing - see instructions above).

<a id="database-setup"></a> Database Setup

Laravel Setup

Just set the database connection you want to be used by Corcel in config/corcel.php.

Let' suppose you have those following database connections in your config/database.php file:

// File: /config/database.php

'connections' => [

    'mysql' => [ // for Laravel database
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'mydatabase',
        'username'  => 'admin'
        'password'  => 'secret',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
        'engine'    => null,
    ],

    'wordpress' => [ // for WordPress database (used by Corcel)
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'mydatabase',
        'username'  => 'admin',
        'password'  => 'secret',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'wp_',
        'strict'    => false,
        'engine'    => null,
    ],
],

In this case you should want to use the wordpress connection for Corcel, so just set it into the Corcel config file config/corcel.php:

'connection' => 'wordpress',

Other PHP Framework (not Laravel) Setup

Here you have to configure the database to fit the Corcel requirements. First, you should include the Composer autoload file if not already loaded:

require __DIR__ . '/vendor/autoload.php';

Now you must set your WordPress database params:

$params = array(
    'database'  => 'database_name',
    'username'  => 'username',
    'password'  => 'pa$$word',
    'prefix'    => 'wp_' // default prefix is 'wp_', you can change to your own prefix
);
Corcel\Database::connect($params);

You can specify all Eloquent params, but some are default (but you can override them).

'driver'    => 'mysql',
'host'      => 'localhost',
'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix'    => 'wp_', // Specify the prefix for WordPress tables, default prefix is 'wp_'

<a id="usage"></a> Usage

<a id="posts"></a> Posts

> Every time you see Post::method(), if you're using your own Post class (where you set the connection name), like App\Post you should use App\Post::method() and not Post::method(). All the examples are assuming you already know this difference.

> In the examples, every time you see Post::method() assume Corcel\Model\Post::method().

// All published posts
$posts = Post::published()->get();
$posts = Post::status('publish')->get();

// A specific post
$post = Post::find(31);
echo $post->post_title;

Creating your own model classes

Optionally you can create your own Post model (or Page, or whatever) which extends Corcel\Post. Then set the connection name (if you want to override the Corcel's default one) you're using, in this case foo-bar:

> Extending Corcel\Model\Post class can add flexibility to your project, once you can add custom methods and logic, according what you need to use from your WordPress database.

<?php // File: app/Post.php

namespace App;

use Corcel\Model\Post as Corcel;

class Post extends Corcel
{
    protected $connection = 'foo-bar';

    public function customMethod() {
        //
    }
}

So, now you can fetch WP database data using your own class:

$posts = App\Post::all(); // using the 'foo-bar' connection

> Just remember you don't have to extends our Post class, you can use Corcel\Model\Post and all others model without any problem.

Meta Data (Custom Fields)

> NOTE: In Corcel v1 you could save meta data using the Post::save() method. That's not allowed anymore. Use saveMeta() or createMeta() (see below) methods to save post meta.

You can retrieve meta data from posts too.

// Get a custom meta value (like 'link' or whatever) from a post (any type)
$post = Post::find(31);
echo $post->meta->link; // OR
echo $post->fields->link;
echo $post->link; // OR

To create or update meta data form a User just use the saveMeta() or saveField() methods. They return bool like the Eloquent save() method.

$post = Post::find(1);
$post->saveMeta('username', 'jgrossi');

You can save many meta data at the same time too:

$post = Post::find(1);
$post->saveMeta([
    'username' => 'jgrossi',
    'url' => 'http://jgrossi.com',
]);

You also have the createMeta() and createField() methods, that work like the saveX() methods, but they are used only for creation and return the PostMeta created instance, instead of bool.

$post = Post::find(1);
$postMeta = $post->createMeta('foo', 'bar'); // instance of PostMeta class
$trueOrFalse = $post->saveMeta('foo', 'baz'); // boolean

Querying Posts by Custom Fields (Meta)

There are multiples possibilities to query posts by their custom fields (meta). Just use the hasMeta() scope under Post (actually for all models using the HasMetaFields trait) class:

// Using just one custom field
$post = Post::published()->hasMeta('username', 'jgrossi')->first(); // setting key and value
$post = Post::published()->hasMeta('username'); // setting just the key

You can also use the hasMeta() scope passing an array as parameter:

$post = Post::hasMeta(['username' => 'jgrossi'])->first();
$post = Post::hasMeta(['username' => 'jgrossi', 'url' => 'jgrossi.com'])->first();
// Or just passing the keys
$post = Post::hasMeta(['username', 'url'])->first();

Fields Aliases

The Post class has support to "aliases", so if you check the Post class you should note some aliases defined in the static $aliases array, like title for post_title and content for post_content.

$post = Post::find(1);
$post->title === $post->post_title; // true

If you're extending the Post class to create your own class you can use $aliases too. Just add new aliases to that static property inside your own class and it will automatically inherit all aliases from parent Post class:

class A extends \Corcel\Post
{
    protected static $aliases = [
        'foo' => 'post_foo',
    ];
}

$a = A::find(1);
echo $a->foo;
echo $a->title; // from Post class

Custom Scopes

To order posts you can use newest() and oldest() scopes, for both Post and User classes:

$newest = Post::newest()->first();
$oldest = Post::oldest()->first();

Pagination

To order posts just use Eloquent paginate() method:

$posts = Post::published()->paginate(5);
foreach ($posts as $post) {
    // ...
}

To display the pagination links just call the links() method:

 {{ $posts->links() }}

<a id="acf"></a> Advanced Custom Fields (ACF)

If you want to retrieve a custom field created by the Advanced Custom Fields (ACF) plugin, you have to install the corcel/acf plugin - click here for more information - and call the custom field like this:

$post = Post::find(123);
echo $post->acf->some_radio_field;
$repeaterFields = $post->acf->my_repeater_name;

To avoid unnecessary SQL queries just set the field type you're requesting. Usually two SQL queries are necessary to get the field type, so if you want to specify it you're skipping those extra queries:

$post = Post::find(123);
echo $post->acf->text('text_field_name');
echo $post->acf->boolean('boolean_field_name');

<a id="custom-post"></a> Custom Post Type

You can work with custom post types too. You can use the type(string) method or create your own class.

// using type() method
$videos = Post::type('video')->status('publish')->get();

// using your own class
class Video extends Corcel\Post
{
    protected $postType = 'video';
}
$videos = Video::status('publish')->get();

Using type() method will make Corcel to return all objects as Corcel\Post. Using your custom class you have the advantage to customize classes, including custom methods and properties, return all objects as Video, for example.

Custom post types and meta data:

// Get 3 posts with custom post type (store) and show its address
$stores = Post::type('store')->status('publish')->take(3)->get();
foreach ($stores as $store) {
    $storeAddress = $store->address; // option 1
    $storeAddress = $store->meta->address; // option 2
    $storeAddress = $store->fields->address; // option 3
}

Configuring the returning Instance

Every time you call something like Post::type('video)->first() or Video::first() you receive a Corcel\Model\Post instance.

If you choose to create a new class for your custom post type, you can have this class be returned for all instances of that post type.

Registering Post Types (the easy way)

Instead of call Post::registerPostType() method for all custom post type you want to register, just use the Corcel's config file and map all custom posts and it's classes. They will be registered automatically for you:

'post_types' => [
    'video' => App\Video::class,
    'foo' => App\Foo::class,
]

So every time you query a custom post type the mapped instance will be returned.

> This is particular useful when you are intending to get a Collection of Posts of different types (e.g. when fetching the posts defined in a menu).

Registering Post Types (the hard way)

//all objects in the $videos Collection will be instances of Post
$videos = Post::type('video')->status('publish')->get();

// register the video custom post type and its particular class
Post::registerPostType('video', '\App\Video')


//now all objects in the $videos Collection will be instances of Video
$videos = Post::type('video')->status('publish')->get();

You can also do this for inbuilt classes, such as Page or Post. Simply register the Page or Post class with the associated post type string, and that object will be returned instead of the default one.

<a id="shortcodes"></a> Shortcodes

From config (Laravel)

You can map all shortcodes you want inside the config/corcel.php file, under the 'shortocodes' key. In this case you should create your own class that implements the Corcel\Shortcode interface, that requires a render() method:

'shortcodes' => [
    'foo' => App\Shortcodes\FooShortcode::class,
    'bar' => App\Shortcodes\BarShortcode::class,
],

This is a sample shortcode class:

class FakeShortcode implements \Corcel\Shortcode
{
    /
     * @param ShortcodeInterface $shortcode
     * @return string
     */
    public function render(ShortcodeInterface $shortcode)
    {
        return sprintf(
            'html-for-shortcode-%s-%s',
            $shortcode->getName(),
            $shortcode->getParameter('one')
        );
    }
}

In runtime

You can add shortcodes by calling the addShortcode method on the Post model :

// [gallery id="1"]
Post::addShortcode('gallery', function ($shortcode) {
    return $shortcode->getName() . '.' . $shortcode->getParameter('id');
});
$post = Post::find(1);
echo $post->content;

> Laravel 5.5 uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider

If you are using Laravel, we suggest adding your shortcodes handlers in App\Providers\AppServiceProvider, in the boot method.

The thunderer/shortcode library is used to parse the shortcodes. For more information, click here.

<a id="taxonomies"></a>Taxonomies

You can get taxonomies for a specific post like:

$post = Post::find(1);
$taxonomy = $post->taxonomies()->first();
echo $taxonomy->taxonomy;

Or you can search for posts using its taxonomies:

$post = Post::taxonomy('category', 'php')->first();

<a id="post-format"></a>Post Format

You can also get the post format, like the WordPress function get_post_format():

echo $post->getFormat(); // should return something like 'video', etc

<a id="pages"></a>Pages

Pages are like custom post types. You can use Post::type('page') or the Corcel\Model\Page class.


use Corcel\Model\Page;

// Find a page by slug
$page = Page::slug('about')->first(); // OR
$page = Post::type('page')->slug('about')->first();
echo $page->post_title;

<a id="cats"></a>Categories and Taxonomies

Get a category or taxonomy or load posts from a certain category. There are multiple ways to achieve it.

// all categories
$cat = Taxonomy::category()->slug('uncategorized')->posts()->first();
echo "<pre>"; print_r($cat->name); echo "</pre>";

// only all categories and posts connected with it
$cat = Taxonomy::where('taxonomy', 'category')->with('posts')->get();
$cat->each(function($category) {
    echo $category->name;
});

// clean and simple all posts from a category
$cat = Category::slug('uncategorized')->posts()->first();
$cat->posts->each(function($post) {
    echo $post->post_title;
});

<a id="attachments"></a>Attachment and Revision

Getting the attachment and/or revision from a Post or Page.

$page = Page::slug('about')->with('attachment')->first();
// get feature image from page or post
print_r($page->attachment);

$post = Post::slug('test')->with('revision')->first();
// get all revisions from a post or page
print_r($post->revision);

<a id="options"></a>Options

> In previous versions of Corcel this classe was called Options instead of Option (singular). So take care of using always this class in the singular form starting from v2.0.0.

> The Option::getAll() method was removed in Corcel 2+, in favor of Option::asArray($keys []).

You can use the Option class to get data from wp_options table:

$siteUrl = Option::get('siteurl');

You can also add new options:

Option::add('foo', 'bar'); // stored as string
Option::add('baz', ['one' => 'two']); // this will be serialized and saved

You can get all options in a simple array:

$options = Option::asArray();
echo $options['siteurl'];

Or you can specify only the keys you want to get:

$options = Option::asArray(['siteurl', 'home', 'blogname']);
echo $options['home'];

<a id="menu"></a> Menu

To get a menu by its slug, use the syntax below. The menu items will be loaded in the items variable (it's a collection of Corcel\Model\MenuItem objects).

The currently supported menu items are: Pages, Posts, Custom Links and Categories.

Once you'll have instances of MenuItem class, if you want to use the original instance (like the original Page or Term, for example), just call the MenuItem::instance() method. The MenuItem object is just a post with post_type equals nav_menu_item:

$menu = Menu::slug('primary')->first();

foreach ($menu->items as $item) {
    echo $item->instance()->title; // if it's a Post
    echo $item->instance()->name; // if it's a Term
    echo $item->instance()->link_text; // if it's a custom link
}

The instance() method will return the matching object:

  • Post instance for post menu item;
  • Page instance for page menu item;
  • CustomLink instance for custom menu item;
  • Term instance for category menu item.

Multi-levels Menus

To handle multi-levels menus, loop through all the menu items to put them on the right levels, for example.

You can use the MenuItem::parent() method to retrieve the parent instance of that menu item:

$items = Menu::slug('foo')->first()->items;
$parent = $items->first()->parent(); // Post, Page, CustomLink or Term (category)

To group menu items according their parents, you can use the ->groupBy() method in the $menu->items collection, grouping menu items by their $item->parent()->ID.

To read more about the groupBy() method take a look on the Laravel documentation.

<a id="users"></a> Users

You can manipulate users in the same manner you work with posts:

// All users
$users = User::get();

// A specific user
$user = User::find(1);
echo $user->user_login;

<a id="auth"></a>Authentication

Using Laravel

Make sure you have CorcelServiceProvider provider registered in config/app.php :

'providers' => [
    // Other Service Providers

    Corcel\Laravel\CorcelServiceProvider::class,
],

And then, define the user provider in config/auth.php to allow Laravel to login with WordPress users:

'providers' => [
    'users' => [
        'driver' => 'corcel',
        'model'  => Corcel\Model\User::class,
    ],
],

Now you can use the Auth facade to authenticate users:

Auth::validate([
    'email' => 'admin@example.com', // or using 'username' too
    'password' => 'secret',
]);

To make Laravel's Password Reset work with Corcel, we have to override how passwords are stored in the database. To do this, you must change Auth/PasswordController.php from:

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller
{
    use ResetsPasswords;

to

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
use Corcel\Laravel\Auth\ResetsPasswords as CorcelResetsPasswords;

class PasswordController extends Controller
{
    use ResetsPasswords, CorcelResetsPasswords {
        CorcelResetsPasswords::resetPassword insteadof ResetsPasswords;
    }

Not using Laravel

You can use the AuthUserProvider class to manually authenticate a user :

$userProvider = new Corcel\Laravel\Auth\AuthUserProvider;
$user = $userProvider->retrieveByCredentials(['username' => 'admin']);
if(!is_null($user) && $userProvider->validateCredentials($user, ['password' => 'admin'])) {
    // successfully login
}

> Remember you can use both username and email as credentials for a User.

<a id="tests"></a> Running Tests

To run the phpunit tests, execute the following command :

./vendor/bin/phpunit

If you have the global phpunit command installed you can just type:

phpunit

All tests were written using Sqlite with :memory database, so it runs in your memory. All tests use factories and migrations. Take a look on tests/database/factories and tests/database/migrations directories for more information.

<a id="contrib"></a> Contributing

All contributions are welcome to help improve Corcel.

Before you submit your Pull Request (PR) consider the following guidelines:

  • Fork https://github.com/corcel/corcel in Github;
  • Clone your forked repository (not Corcel's) locally and create your own branch based on the version you want to fix (2.1, 2.2, 2.3, 2.4 or 2.5): git checkout -b my-fix-branch 2.5;
  • Make all code changes. Remember here to write at least one test case for any feature you add or any bugfix (if it's not tested yet). Our goal is to have 100% of the code covered by tests, so help us to write a better code ;-) If you don' have experience with tests it's a good opportunity to learn. Just take a look into our tests cases and you'll see how simple they are.
  • Run the unit tests locally to make sure your changes did not break any other piece of code;
  • Push your new branch to your forked repository, usually git push origin HEAD should work;
  • In GitHub again, create a Pull Request (PR) from your custom my-fix-branch branch (from your forked repository) to the related branch (corcel:2.5, for example, not corcel:master, please;
  • Wait for the approval :-)

<a id="license"></a> Licence

MIT License Junior Grossi


  Classes of Junior Grossi  >  Corcel (Laravel + WordPress)  >  Download Download .zip .tar.gz  >  Support forum Support forum  >  Blog Blog (1)  >  RSS 1.0 feed RSS 2.0 feed Latest changes  
Name: Corcel (Laravel + WordPress)
Base name: corcel
Description: Use the WordPress backend with any PHP application
Version: 1.0.39
PHP version: 5.4
License: MIT/X Consortium License
All time users: 393 users
All time rank: 6377
Week users: 3 users
Week rank: 230 Up
 
  Groups   Rate classes User ratings   Applications   Files Files  

  Groups  
Group folder image PHP 5 Classes using PHP 5 specific features View top rated classes
Group folder image Databases Database management, accessing and searching View top rated classes
Group folder image Blogs Managing and publishing blogs View top rated classes


  Recommendations  

Background WordPress User Validation
I need to check that a user is still logged in to WordPres


  Innovation Award  
PHP Programming Innovation award winner
May 2016
Winner


Prize: One big elePHPant Plush Mascott
WordPress is certainly one of the most popular and successful PHP based projects that was ever created apart of the PHP language itself.

However, great part of WordPress code is not even written using object oriented programming.

On the other hand Laravel is one of the most recent PHP frameworks that gained great traction supporting MVC and other design patterns.

This framework brings the world of WordPress to the Laravel developers, so you can write Laravel based applications with the WordPress backend.

Manuel Lemos

  User ratings  
RatingsUtility Consistency Documentation Examples Tests Videos Overall Rank
All time: Good (95%) Good (95%) Good (90%) - - - Sufficient (66%) 711
Month: Not yet rated by the users

  Applications that use this package  
No pages of applications that use this class were specified.

Add link image If you know an application of this package, send a message to the author to add a link here.

  Files folder image Files  
File Role Description
Files folder image.github (1 file)
Files folder imagesrc (4 files, 4 directories)
Files folder imagetests (1 file, 2 directories)
Accessible without login Plain text file .styleci.yml Data Auxiliary data
Accessible without login Plain text file .travis.yml Data Auxiliary data
Accessible without login Plain text file codeclimate.sh Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file README.md Doc. Class source

  Files folder image Files  /  .github  
File Role Description
  Accessible without login Plain text file ISSUE_TEMPLATE.md Data Auxiliary data

  Files folder image Files  /  src  
File Role Description
Files folder imageConcerns (6 files)
Files folder imageLaravel (2 files, 1 directory)
Files folder imageModel (13 files, 3 directories)
Files folder imageServices (1 file)
  Plain text file Corcel.php Class Class source
  Plain text file Database.php Class Class source
  Plain text file Model.php Class Class source
  Plain text file Shortcode.php Class Class source

  Files folder image Files  /  src  /  Concerns  
File Role Description
  Plain text file AdvancedCustomFields.php Class Class source
  Plain text file Aliases.php Class Class source
  Plain text file CustomTimestamps.php Class Class source
  Plain text file MetaFields.php Class Class source
  Plain text file OrderScopes.php Class Class source
  Plain text file Shortcodes.php Class Class source

  Files folder image Files  /  src  /  Laravel  
File Role Description
Files folder imageAuth (2 files)
  Accessible without login Plain text file config.php Aux. Auxiliary script
  Plain text file CorcelServiceProvider.php Class Class source

  Files folder image Files  /  src  /  Laravel  /  Auth  
File Role Description
  Plain text file AuthUserProvider.php Class Class source
  Plain text file ResetsPasswords.php Class Class source

  Files folder image Files  /  src  /  Model  
File Role Description
Files folder imageBuilder (3 files)
Files folder imageCollection (1 file)
Files folder imageMeta (6 files)
  Plain text file Attachment.php Class Class source
  Plain text file Comment.php Class Class source
  Plain text file CustomLink.php Class Class source
  Plain text file Menu.php Class Class source
  Plain text file MenuItem.php Class Class source
  Plain text file Option.php Class Class source
  Plain text file Page.php Class Class source
  Plain text file Post.php Class Class source
  Plain text file Tag.php Class Class source
  Plain text file Taxonomy.php Class Class source
  Plain text file Term.php Class Class source
  Plain text file TermRelationship.php Class Class source
  Plain text file User.php Class Class source

  Files folder image Files  /  src  /  Model  /  Builder  
File Role Description
  Plain text file CommentBuilder.php Class Class source
  Plain text file PostBuilder.php Class Class source
  Plain text file TaxonomyBuilder.php Class Class source

  Files folder image Files  /  src  /  Model  /  Collection  
File Role Description
  Plain text file MetaCollection.php Class Class source

  Files folder image Files  /  src  /  Model  /  Meta  
File Role Description
  Plain text file CommentMeta.php Class Class source
  Plain text file Meta.php Class Class source
  Plain text file PostMeta.php Class Class source
  Plain text file TermMeta.php Class Class source
  Plain text file ThumbnailMeta.php Class Class source
  Plain text file UserMeta.php Class Class source

  Files folder image Files  /  src  /  Services  
File Role Description
  Plain text file PasswordService.php Class Class source

  Files folder image Files  /  tests  
File Role Description
Files folder imagedatabase (2 directories)
Files folder imageUnit (2 files, 2 directories)
  Plain text file TestCase.php Class Class source

  Files folder image Files  /  tests  /  database  
File Role Description
Files folder imagefactories (13 files)
Files folder imagemigrations (11 files)

  Files folder image Files  /  tests  /  database  /  factories  
File Role Description
  Plain text file AttachmentFactory.php Class Class source
  Plain text file CommentFactory.php Class Class source
  Plain text file CommentMetaFactory.php Class Class source
  Plain text file CustomLinkFactory.php Class Class source
  Plain text file MenuFactory.php Class Class source
  Plain text file MenuItemFactory.php Class Class source
  Plain text file OptionFactory.php Class Class source
  Plain text file PostFactory.php Class Class source
  Plain text file PostMetaFactory.php Class Class source
  Plain text file TaxonomyFactory.php Class Class source
  Plain text file TermFactory.php Class Class source
  Plain text file ThumbnailMetaFactory.php Class Class source
  Plain text file UserFactory.php Class Class source

  Files folder image Files  /  tests  /  database  /  migrations  
File Role Description
  Plain text file 2017_07_05_181000_...mmentmeta_table.php Class Class source
  Plain text file 2017_07_05_181100_..._comments_table.php Class Class source
  Plain text file 2017_07_05_181200_...l_options_table.php Class Class source
  Plain text file 2017_07_05_181300_..._postmeta_table.php Class Class source
  Plain text file 2017_07_05_181400_...cel_posts_table.php Class Class source
  Plain text file 2017_07_05_181500_...tionships_table.php Class Class source
  Plain text file 2017_07_05_181600_..._taxonomy_table.php Class Class source
  Plain text file 2017_07_05_181700_..._termmeta_table.php Class Class source
  Plain text file 2017_07_05_181800_...cel_terms_table.php Class Class source
  Plain text file 2017_07_05_181900_..._usermeta_table.php Class Class source
  Plain text file 2017_07_05_182000_...cel_users_table.php Class Class source

  Files folder image Files  /  tests  /  Unit  
File Role Description
Files folder imageModel (10 files, 1 directory)
Files folder imageTraits (2 files)
  Plain text file AuthenticationTest.php Class Class source
  Plain text file DatabaseTest.php Class Class source

  Files folder image Files  /  tests  /  Unit  /  Model  
File Role Description
Files folder imageMeta (1 file)
  Plain text file AttachmentTest.php Class Class source
  Plain text file CommentTest.php Class Class source
  Plain text file MenuTest.php Class Class source
  Plain text file OptionTest.php Class Class source
  Plain text file PostTest.php Class Class source
  Plain text file PostTypeTest.php Class Class source
  Plain text file TaxonomyTest.php Class Class source
  Plain text file TermTest.php Class Class source
  Plain text file ThumbnailTest.php Class Class source
  Plain text file UserTest.php Class Class source

  Files folder image Files  /  tests  /  Unit  /  Model  /  Meta  
File Role Description
  Plain text file PostMetaTest.php Class Class source

  Files folder image Files  /  tests  /  Unit  /  Traits  
File Role Description
  Plain text file AliasesTraitTest.php Class Class source
  Plain text file HasMetaFieldsTest.php Class Class source

Install with Composer Install with Composer - Download Download all files: corcel.tar.gz corcel.zip
NOTICE: if you are using a download manager program like 'GetRight', please Login before trying to download this archive.