Published: June 22, 2022
Updated: December 2, 2022
statamic
wordpress
migration
cms
laravel
corcel
In this post we will focus on importing WordPress posts to Statamic v3 by using the Laravel package Corcel. Before starting our migration we did some research and found out about this great article explaining the installation process of Corcel and simple data migration. However, our use case was more complicated and that's what we will explain here.
Our client has a WordPress website that is built with Visual Composer. After many struggles, they decide it's time to move on from WordPress and look for alternatives. We proposed to migrate their website to Statamic CMS and the client agreed. However, Visual Composer adds its own tags (inside of [] ) to the HTML content and we need to strip those out before saving them to Statamic. We also need to relink internal links because Visual Composer uses ids for them. The client also wanted to rename/remove some category names.
Corcel is a fantastic Laravel package that allows us to get data directly from a WordPress database. It can be useful for keeping WordPress as the backend while you choose your preferred technologies for the frontend. In our case, we can use it for importing the data we have on our WordPress site database.
Installation can be done through composer:
composer require jgrossi/corcel
Then, we can publish the configuration file to make additional changes:
php artisan vendor:publish --provider="Corcel\Laravel\CorcelServiceProvider"
We need to navigate to config/database.php
and modify the mysql
connection. We can rename it WordPress and modify it for connecting to your database. This is our configuration:
<?php
return [
'wordpress' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'wp_',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
],
]
We also need to tell Corcel which database connection to use. We need to edit config/corcel.php
:
'connection' => 'wordpress',
That's it for Corcel. Now we can continue with our migration process.
To make it easier, we will create a Laravel command that can be executed through the terminal. This can be done with:
php artisan make:command ImportWordPress
For a simple use case, we can use the following code to get the latest 100 posts from our WordPress database:
<?php
namespace App\Console\Commands;
use Corcel\Model\Post;
use Illuminate\Console\Command;
class ImportWordPress extends Command
{
protected $signature = 'import:wp';
protected $description = 'Import posts from WordPress';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$posts = Post::type('post')
->orderBy('post_date', 'desc')
->published()
->limit(100)
->get();
return 'WordPress posts successfully retrieved';
}
}
Now that we have our posts, we can include use Statamic\Facades\Entry;
to transform our posts as Statamic entries.
<?php
namespace App\Console\Commands;
use Statamic\Facades\Entry;
use Corcel\Model\Post;
use Illuminate\Console\Command;
class ImportWordPress extends Command
{
protected $signature = 'import:wp';
protected $description = 'Import posts from WordPress';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$posts = Post::type('post')
->orderBy('post_date', 'desc')
->published()
->limit(100)
->get();
foreach ($posts as $post){
$entry = Entry::make()
->collection('posts')
->slug($post->post_name)
->date($post->post_date)
->data([
'title' => $post->title,
'categories' => $post->main_category,
'content' => $content,
]);
$entry->save();
}
return 'WordPress posts successfully migrated to Statamic';
}
}
Done! Your WordPress site doesn't use any crazy plugin that adds all sorts of tags to your content HTML file. You're so lucky. 🚀
Does the post content hold a bunch of weird tags? Your client probably uses a plugin for inserting posts through WordPress. You will need to make more improvements to remove all those un-useful tags. In our case study, the client used Visual Composer as a visual builder for their posts.
We had the following issues to deal with:
To keep this post simple, we will explain more details in the following post.
If you need to migrate your WordPress site to Statamic let's get in touch.
Stay up to date
Be updated with all news, products and tips we share!