cloakwp / eloquent
WordPress的Laravel包装器,将所有WordPress表转换为Laravel Eloquent模型。
Requires
- php: >=8.0
- illuminate/database: >=11.7.0
- illuminate/events: >=11.7.0
- laravel/serializable-closure: ^1.3
This package is auto-updated.
Last update: 2024-09-10 00:44:38 UTC
README
一个将WordPress表转换为Laravel Eloquent模型的库。这有助于将Laravel Eloquent模型的强大功能引入任何WordPress项目。或者,如果您正在使用类似Slim或Lumen的工具编写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
元数据
模型Post
、User
、Comment
、Term
都实现了HasMeta
。因此,可以通过getMeta
和setMeta
辅助函数轻松检索和设置元数据。
$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);
查询日志
有时查看查询日志对于调试很有帮助。您可以通过在Laravel::connect
方法中设置log
为true
(请参阅设置)来启用日志。日志通过运行检索。
use \WPEloquent\Core\Laravel; print_r(Laravel::queryLog());