angusallman/wordpress-eloquent

分支自:https://github.com/drewjbartlett/wordpress-eloquent。这是一个Laravel的包装器,将所有WordPress模型转换为Laravel Eloquent模型。

该包的官方仓库似乎已不存在,因此该包已被冻结。

0.2.4 2019-05-28 15:24 UTC

This package is auto-updated.

Last update: 2022-04-25 02:11:11 UTC


README

687474703a2f2f647265776a626172746c6574742e636f6d2f696d616765732f6769746875622f6c6f676f2d6c61726176656c2e737667 687474703a2f2f647265776a626172746c6574742e636f6d2f696d616765732f6769746875622f776f726470726573732d6c6f676f2e706e67

这是一个将WordPress表转换为 Laravel Eloquent模型 的库。这对于将Laravel Eloquent模型的出色功能集成到任何WordPress项目中非常有用。或者,如果您正在使用类似 SlimLumen 的API,并且不想通过加载整个WP核心来增加加载时间,这将是一个很好的模板。

** 这是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();

或者,如果您需要特定状态,可以通过定义状态来覆盖,通过 local scope

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

文章类型

默认情况下,Post 返回所有文章类型。但是,您可以通过定义文章类型来覆盖此设置,通过 local scope

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());