leeovery/wordpress-to-laravel

v3.1 2023-09-23 13:36 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

如果你使用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插件

Wordpress 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 后端创建一个简单的空主题并激活它,可以轻松实现这一点。

  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)。有关更多信息,请参阅 许可证文件