init-development-studios / headless-wordpress-sync
使用 WP REST API 从无头 WordPress 实例同步内容。
Requires
- php: ^8.2
- illuminate/contracts: ^11.0
- spatie/laravel-package-tools: ^1.13.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^8.1
- orchestra/testbench: ^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.0
- spatie/laravel-ray: ^1.26
README
一个用于简化与无头 WordPress 实例集成的 Laravel 扩展包。
[[目录]]
入门指南
本指南将指导您设置 Laravel 实例和无头 WordPress 实例。
设置分为两个步骤
- 设置 WordPress
- 设置 Laravel
无头 WordPress
设置 WordPress 包括安装和激活两个 WordPress 插件。
- CollabPay 无头 WordPress 插件 (https://gitlab.com/collabpay/headless-wordpress-plugin) - TODO 将其移动到 Init Dev 标签下以便重用。
- JWT 认证 WP REST API (https://en-au.wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) - 第三方插件,可启用访问需要认证的 API 资源(例如用户详细信息)。
- 请确保将 WP 设置为使用 postname 作为永久链接,否则 API 将返回 404。
步骤 X
让我们从安装 JWT Authentication For WP REST API 插件开始。
按照 插件安装页面 上的说明操作。
对于绝大多数用户,“使用 WordPress 控制台”就足够了。
步骤 X
JWT Authentication 插件还需要一些配置。我们必须在 wp-config.php
文件中定义一个密钥。
只需添加以下内容。
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');
您可以使用这里的字符串 (https://api.wordpress.org/secret-key/1.1/salt/)。
步骤 X
从 WordPress 管理界面中的已安装插件页面激活 JWT Authentication 插件。
步骤 X
现在让我们安装 Laravel 无头 WordPress 插件。
由于此插件未公开发布,我们最好通过 ZIP 文件安装新插件。
步骤 X
从“添加新插件”页面点击页面顶部的“上传插件”按钮。
然后点击“浏览”按钮。
找到并选择上面下载的 ZIP 文件。
点击“立即安装”。
然后点击“激活插件”。
WordPress 已设置完成!
Laravel
现在我们来进行 Laravel 扩展包的安装和配置。
步骤 X
可以通过 composer 安装 Laravel 扩展包。
但是,由于此扩展包未公开发布,需要对 composer.json
文件进行以下手动更改。
添加以下根 JSON 对象
"repositories": [
{
"type": "git",
"url": "git@gitlab.com:init-dev/headless-wordpress/headless-wordpress-sync.git"
}
],
然后运行
composer require init-development-studios/headless-wordpress-sync:dev-main
注意,您必须有权访问 GIT 仓库。
步骤 X
需要迁移几个表。
发布迁移。
php artisan vendor:publish --tag=headless-wordpress-sync-migrations
步骤 X
运行迁移。
php artisan migrate
步骤 X
现在让我们发布配置文件。
php artisan vendor:publish --tag=headless-wordpress-sync-config
步骤 X
现在 Laravel 应用的 config
目录中将有 headless-wordpress-sync.php
配置文件。
查看该文件并根据需要配置您的应用程序。请注意,以下属性是必需的
url
- 可通过应用程序的 .env 文件中的HEADLESS_WP_URL
进行配置。username
- 可通过应用程序的 .env 文件中的HEADLESS_WP_USERNAME
进行配置。password
- 可通过应用程序的 .env 文件中的HEADLESS_WP_PASSWORD
进行配置。
示例 .env
HEADLESS_WP_URL=https://wordpress.test
HEADLESS_WP_USERNAME=api-user
HEADLESS_WP_PASSWORD="tQdVIc!gdb7eD(o9IZ&^WEXm"
可选
在本地开发时,通常不需要进行SSL / TLS验证。
HEADLESS_WP_VERIFY_CERTIFICATE=false
当为多个网站托管内容时,需要提供要在此Laravel应用程序实例上显示内容的网站的website_slug
。
此slug与在无头WordPress应用程序的Admin界面中定义的“Posts > Website”相匹配。
HEADLESS_WP_WEBSITE_SLUG=collabpay
步骤 X
为了使Laravel应用程序与WordPress应用程序保持同步,每分钟执行一个定时任务。
定时任务将自动运行。
确保应用程序正在运行定时任务,并且HEADLESS_WP_SYNC_ENABLED
在.env
文件中不存在或设置为TRUE
。
注意,也可以通过运行php artisan headless-wp:sync
手动执行同步。
步骤 X
现在您可以开始更新应用程序,以展示您的WordPress托管内容。
获取内容
可以使用标准的Eloquent查询获取内容!
文章
所有文章
WpPost::all()
单个文章
WpPost::whereSlug('individual-post-slug')->first();
限定于当前网站
WpPost::currentWebsite()->get()
仅发布文章
WpPost::published()->get()
按发布日期/时间排序
WpPost::orderByDesc('published_at_utc')->get()
在指定类别中
WpPost::inCategory(WpCategory::whereSlug('tutorials')->first())->get()
单个文章类别
WpPost::whereSlug('individual-post-slug')->first()->categories;
单个文章标签
WpPost::whereSlug('individual-post-slug')->first()->tags;
单个文章作者
WpPost::whereSlug('individual-post-slug')->first()->author;
相关文章
所有相关和反向相关的文章。
要关联文章,请在一个文章上添加名为related_post_slugs
的自定义字段,然后将值设置为以逗号分隔的文章slug列表。
WpPost::whereSlug('individual-post-slug')->first()->related();
相关文章查询
与上面相同,但将返回一个查询构建器,允许进一步查询构建
$query = WpPost::whereSlug('individual-post-slug')->first()->relatedQuery();
// Can then be queried further (eg only return published related articles)
$query->published()->get();
搜索文章
在文章标题和内容中搜索精确的术语。
注意,这是在数据库级别执行的。
为了更好的搜索,请考虑使用Laravel Scout。
WpPost::search('individual-post-slug')->first()->related();
类别
所有类别
WpCategory::all()
单个类别
WpCategory::whereSlug('tutorials')->first()
作者(用户)
所有作者
WpUser::all();
单个作者
WpUser::find(1);
单个作者的Gravatar头像URL
WpUser::find(1)->image()->url();
待办事项
- 禁用WP前端,使其真正成为无头。以前使用过另一个插件,但是内置此功能将更理想。
- 在单个类别页面上渲染搜索输入
- 改进社交媒体元标签
- 想法:在单个文章侧边栏上添加搜索,以及可能在整个网站的其他地方。现在很容易做到。
支持
待办事项
路线图
短期
- 使WP插件公开。需要进一步完善和测试。可能在实际使用案例CollabPay中实现。
- 使Laravel插件公开。应在WP插件公开发布时发生。
- 在readme中添加截图
长期
- 扩展对更多WordPress功能/功能的支持。
- 在搜索文章时支持Laravel Scout。
贡献
待办事项
作者和致谢
待办事项
许可
待办事项