khtet404/wordpress-to-laravel

v3.0 2020-09-20 14:24 UTC

README

Latest Version on Packagist Software License

你想拥有一个博客,对吧?你想使用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站点

Wordpress API

用法

首先,最好执行一次完整同步,以便一次将所有帖子等同步过来。之后,它将仅同步已修改的页面的第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后台创建一个小空主题并激活它,可以轻松实现这一点。

  1. 在您的WP主题目录中创建一个名为'redirection_theme'的新主题

  2. 创建一个名为style.css的文件,并插入以下内容

    /*
    Theme Name: turn off frontend
    Theme URI:
    Description:
    Author:
    Version:
    License: GNU
    License URI:
    Tags:
    */
  3. 创建一个名为index.php的文件,并插入以下内容

    <?php
    global $wp;
    $url = str_replace('blog.', '', home_url() . '/blog/' . $wp->request);
    wp_redirect($url, 301);
    die();
  4. 最后,创建一个名为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');
  5. 别忘了在WP后台中激活它。

祝您使用愉快!

贡献

请参阅CONTRIBUTINGCONDUCT以获取详细信息。

致谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件