khtet404 / 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
在您的env文件中设置您的WP博客的URL
WP_TO_LARAVEL_API_URL=https://blog.your-blog-domain.com/
最后,我们需要配置WP本身。如果您使用的是Wordpress 4.7+,那么您就绪了 - 继续吧!否则,您需要将WP API插件安装到您希望从中同步的WP站点
用法
首先,最好执行一次完整同步,以便一次将所有帖子等同步过来。之后,它将仅同步已修改的页面的第1页(默认情况下)。
强制同步所有已发布的帖子
$ 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)。有关更多信息,请参阅许可文件。