drewjbartlett/wordpress-eloquent

Laravel的WordPress包装器,将所有WordPress模型转换为Laravel Eloquent模型。

v0.2.1 2017-09-07 22:40 UTC

This package is not auto-updated.

Last update: 2024-09-15 01:41:27 UTC


README

一个将WordPress表转换为Laravel Eloquent模型的库。这对于将Laravel Eloquent模型的强大功能集成到任何WordPress项目中非常有用。或者,如果您正在使用类似SlimLumen的工具编写API,并且不想通过加载整个WP核心来增加您的加载时间,这将非常有用。这是一个基于Laravel的Eloquent的伟大模板,可以让您快速开始。

** 这是对Eloquent附加功能的文档。有关Eloquent所有功能的文档,请访问文档

概述

安装

composer require drewjbartlett/wordpress-eloquent

设置

require_once('vendor/autoload.php');

\WPEloquent\Core\Laravel::connect([
    'global' => true,

    'config' => [

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

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

    // enable events
    'events' => false,

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

如果您想在您的整个WP安装上启用此功能,您可以创建一个文件,将其放入mu-plugins文件夹中。

文章

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;

状态

默认情况下,Post返回所有状态的文章。但是,您可以使用局部作用域 published来仅返回已发布文章。

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

或者,如果您需要特定状态,可以通过局部作用域来覆盖它。

Post::status('draft')->get();

文章类型

默认情况下,Post返回所有文章类型。但是,您可以通过局部作用域定义文章类型来覆盖此操作。

Post::type('page')->get();

评论

use \WPEloquent\Model\Comment;

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

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

术语

在此版本中,Term作为模型仍然可用,但只能通过文章来利用。

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

用户

use \WPEloquent\Model\User;

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

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

元数据

PostUserCommentTerm模型都实现了HasMeta接口。因此,可以通过getMetasetMeta辅助函数轻松检索和设置元数据。

$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');

// delete meta
$post = Post::find(123)->deleteMeta('some_term_meta');

选项

在WordPress中,您可以使用get_option。或者,如果您不想加载WordPress核心,可以使用辅助函数getValue

use \WPEloquent\Model\Post;

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

或者当然,长形式

use \WPEloquent\Model\Options;

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

链接

use \WPEloquent\Model\Link;

$siteurl = Link::find(1);

扩展您的模型

如果您想向模型添加自己的功能,例如User,您可以这样做

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');
    }

}

另一个例子是为文章的自定义分类,比如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);

查询日志

有时查看查询日志对于调试很有帮助。您可以通过将log设置为true(参见设置)在Laravel::connect方法上启用日志。日志可以通过运行来检索。

use \WPEloquent\Core\Laravel;

print_r(Laravel::queryLog());