Skip to content

A library that converts converts wordpress tables into Laravel Eloquent Models.

License

Notifications You must be signed in to change notification settings

merlindiavova/wordpress-eloquent

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wordpress Laravel Eloquent Models

A library that converts converts wordpress tables into Laravel Eloquent Models. This is helpful for dropping into any wordpress project where maybe you'd rather use the awesome features of Laravel's Eloquent Models. Or maybe you're writing an API with something like Slim or better yet Lumen don't want to increase your load time by loading the entire WP core. This is a great boiler plate based off Eloquent by Laravel to get you going.

** This is documentation for additional functionality on top of Eloquent. For documentation on all of Eloquent's features you visit the documentation.

Overview

Extending your own models

Installation

composer require drewjbartlett/wordpress-eloquent

Setup

    require_once('vendor/autoload.php');

    \WPEloquent\Core\Laravel::connect([
        'config' => [

            'database' => [
                'user'     => 'user',
                'password' => 'password',
                'name'     => 'database',
                'host'     => '127.0.0.1'
            ],

            // your wpdb prefix
            'prefix' => 'wp_',

            // enable events
            'events' => false,

            // enable query log
            'log'    => true
        ],
    ]);

If you wanted to enable this on your entire WP install you could create a file with the above code to drop in the mu-plugins folder.

Posts

    use \WPEloquent\Model\Post;

    // getting a post
    $post = Post::find(1);

    // available relationships
    $post->author;
    $post->comments;
    $post->terms;
    $post->tags;
    $post->categories;
    $post->meta;

By default, the Post returns posts with all statuses. You can however override this with the local scope published to return only published posts.

    Post::published()->get();

Comments

    use \WPEloquent\Model\Comment;

    // getting a comment
    $comment = Comment::find(12345);

    // available relationships
    $comment->post;
    $comment->author;
    $comment->meta

Terms

In this version Term is still accesible as a model but is only leveraged through posts.

    $post->terms()->where('taxonomy', 'country');

Users

    use \WPEloquent\Model\User;

    // getting a comment
    $user = User::find(123);

    // available relationships
    $user->posts;
    $user->meta;
    $user->comments

Meta

The models Post, User, Comment, Term, all implement the MetaTrait. Therefore they meta can easily be retrieved by the getMeta and set by the setMeta helper functions:

    $post = Post::find(1);
    $post->setMeta('featured_image', 'my-image.jpg');
    $post->setMeta('breakfast', ['waffles' => 'blueberry', 'pancakes' => 'banana']);

    // or all in one call
    $featured_image = Post::find(1)->getMeta('featured_image');
    Post::find(1)->setMeta('featured_image', 'image.jpg');

    // same applies for all other models

    $user = User::find(1)
    $facebook = $user->getMeta('facebook');
    $user->setMeta('social', ['facebook' => 'facebook.com/me', 'instagram' => 'instagram.com/me']);

    $comment = Comment::find(1);
    $meta = $comment->getMeta('some_comment_meta');

    $term = Term::find(123);
    $meta = $term->getMeta('some_term_meta');

Options

In wordpress you can use get_option. Alternatively, if you don't want to load the wordpress core you can use helper function getValue.

    use \WPEloquent\Model\Post;

    $siteurl = Option::getValue('siteurl');

Or of course, the long form:

    use \WPEloquent\Model\Options;

    $siteurl = Option::where('option_name', 'siteurl')->value('option_value');

Links

    use \WPEloquent\Model\Link;

    $siteurl = Link::find(1);

Extending your own models

If you want to add your own functionality to a model, for instance a User you can do so like this:

    namespace App\Model;

    class User extends \WPEloquent\Model\User {

        public function orders() {
            return $this->hasMany('\App\Model\User\Orders');
        }

        public function current() {
            // some functionality to get current user
        }

        public function favorites() {
            return $this->hasMany('Favorites');
        }

    }

Another example would be for custom taxonomies on a post, say country

    namespace App\Model;

    class Post extends \WPEloquent\Model\Post {

        public function countries() {
            return $this->terms()->where('taxonomy', 'country');
        }

    }

    Post::with(['categories', 'countries'])->find(1);

Query Logs

Sometimes it's helpful to see the query logs for debugging. You can enable the logs by passing log is set to true (see setup) on the Laravel::connect method. Logs are retrieved by running.

    use \WPEloquent\Core\Laravel;

    print_r(Laravel::queryLog());

** Disclaimer: This is the first version. There's a lot more that can be added to this but this works and is fully extendable. Expect updates in the near future!

About

A library that converts converts wordpress tables into Laravel Eloquent Models.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%