purrdigital/wordpress-eloquent

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

dev-master 2022-11-15 10:03 UTC

This package is not auto-updated.

Last update: 2024-10-02 17:21:34 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();

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

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