leeovery / wordpress-to-laravel
Requires
- php: ^7.3
- cartalyst/tags: >=v8.0.0
- guzzlehttp/guzzle: ^7.0
- illuminate/console: ^8.0
- illuminate/contracts: ^8.0
- illuminate/database: ^8.0
- illuminate/events: ^8.0
- illuminate/support: ^8.0
- league/fractal: ^0.19.0
Requires (Dev)
- phpunit/phpunit: ^9.3
README
你想要一个博客,对吧?你想要使用Wordpress后端?但你不喜欢Wordpress主题,并且非常不喜欢创建它们?那么这个就是为你准备的...
此包提供了从WP数据库同步WP帖子到你的Laravel数据库(或者你想去的地方)的工具集。这样你仍然可以使用WP后端来撰写帖子和管理后端用户等,但同时也给了你自由定制自己的前端,而不需要那些无聊的WP主题。
它将自己暴露为Artisan命令,这意味着你可以设置它定期运行(使用Laravel的调度器)以同步你的WP帖子、分类、标签和作者到你的Laravel数据库。
接下来是安装...
安装
通过Composer
$ composer require leeovery/wordpress-to-laravel
添加包后,将ServiceProvider添加到config/app.php中的providers数组
LeeOvery\WordpressToLaravel\WordpressToLaravelServiceProvider::class,
发布配置文件
$ php artisan vendor:publish --provider="LeeOvery\WordpressToLaravel\WordpressToLaravelServiceProvider" --tag="config"
迁移你的数据库以设置帖子、分类、标签和作者表
$ php artisan migrate
如果你使用wordpress.com来托管你的博客,将以下环境变量设置为true(默认为false)。这是因为wordpress.com和wordpress.org(自托管实例)在获取帖子时具有不同的URL结构
WP_TO_LARAVEL_IS_WORDPRESS_COM=true
接下来,将你的WP博客URL添加到环境文件中
WP_TO_LARAVEL_API_URL=https://blog.your-blog-domain.com/
或者对于wordpress.com托管的博客(更改URL中的your-blog部分)
WP_TO_LARAVEL_API_URL=https://public-api.wordpress.com/wp/v2/sites/your-blog.wordpress.com/
最后,我们需要配置WP本身。如果你使用Wordpress 4.7+,那么你就准备好了——继续吧!否则,你需要在想要同步的WP网站上安装WP API插件
用法
首先,最好执行一次完整同步,一次性将所有帖子等同步过来。之后,它只会同步修改过的页面的第一页(默认情况下)。
强制同步所有已发布的帖子
$ php artisan wordpress-to-laravel:import -F -T
-F
标志强制所有帖子同步。-T
标志将在同步之前截断所有相关的数据库表。
你可以随时再次运行它来截断并重新同步所有帖子等。
完成之后,你应在你的Laravel应用程序中设置以下内容,以便将所有最近修改的WP帖子同步到本地数据库
$schedule->command('wordpress-to-laravel:import') ->everyMinute();
显示帖子
同步只是工作的一半。你需要在博客上显示你的帖子等。但这也非常简单。
只需使用提供的Post、Category和Author Eloquent模型。或者,如果你需要额外的方法或功能,你也可以提供自己的。
为了方便起见,我建议扩展提供的模型。如果你想要使用自己的,你应该更新配置文件以使用你的模型。同时,确保转换器与你的模型兼容,否则你将需要提供新的版本(它们应该扩展Fractal的AbstractTransformer),并更新相应模型的转换器配置值。
提供的模型示例用法(此代码将出现在你的BlogController、BlogTagController和BlogCategoryController中)
// to show newest 5 posts, paginated... $posts = Post::orderBy('published_at', 'desc') ->paginate(5); // to fetch a post using the slug, or fail... $post = Post::slug($slug)->firstOrFail(); // to fetch tag by tag slug, or fail... $tag = Post::createTagsModel()->whereSlug($tag)->firstOrFail(); // to fetch newest 5 posts (paginated) by tag slug (from above)... $posts = Post::whereTag($tag->slug) ->orderBy('published_at', 'desc') ->paginate(5); // to fetch category by category slug, or fail... $category = Category::whereSlug($category)->firstOrFail(); // to fetch newest 5 posts (paginated) by category slug (from above)... $posts = Post::whereCategory($category->slug) ->orderBy('published_at', 'desc') ->paginate(5);
媒体
当你使用WP后端上传媒体时,链接将指向你的WP博客URL。这可能对你来说没问题。但对我们来说不是。因此,我们在WP网站上安装了S3插件。这意味着通过WP上传的所有媒体都将上传到你的S3存储,并且这些图像的URL将即时重写为S3位置。在同步时,将尊重这些更新的媒体URL。
重定向 WP 前端到新前端
假设您的 WP 博客位于 https://blog.example.com,而您的新 Laravel 前端位于 https://example.com/blog/。理想情况下,您希望旧前端重定向到新前端。通过在 WP 后端创建一个简单的空主题并激活它,可以轻松实现这一点。
-
在您的 WP 主题目录中创建一个名为 'redirection_theme' 的新主题
-
创建一个名为 style.css 的文件,并插入以下内容
/* Theme Name: turn off frontend Theme URI: Description: Author: Version: License: GNU License URI: Tags: */
-
创建一个名为 index.php 的文件,并插入以下内容
<?php global $wp; $url = str_replace('blog.', '', home_url() . '/blog/' . $wp->request); wp_redirect($url, 301); die();
-
最后,创建一个名为 functions.php 的文件,并插入以下内容
<?php function redirection_theme_change_view_link($permalink) { $url = str_replace('blog.', '', env('WP_HOME') . '/blog'); return str_replace(env('WP_HOME'), $url, $permalink); } add_filter('post_link', 'redirection_theme_change_view_link');
-
别忘了在 WP 后端中激活它。
享受吧!
贡献
请参阅 CONTRIBUTING 和 CONDUCT 了解详细信息。
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。