Recuperando Usuários do WordPress usando Laravel
Preparando o ambiente
Vamos criar um novo projeto Laravel com o comando laravel new wp-users-laravel1. Selecione “None” quando perguntado sobre o starter kit a ser usado e SQLite para o banco de dados. No momento que estou escrevendo esse artigo, a versão do Laravel utilizada é a 12. Acesse a pasta do projeto criado e certifique-se de rodar o comando npm install.
Nesse ponto, ao rodar o comando composer run dev, você deve ser capaz de acessar http://localhost:8000/ e ver a página padrão do Laravel.
Para finalizar, vamos criar a rota /wp-users onde será exibido o resultado da nossa consulta. Para isso, edite o arquivo routes/web.php e adicione:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
// New route
Route::get('/wp-users', function () {
return 'Hello, wp-users';
});Acessando http://localhost:8000/wp-users, deve ser exibido o texto “Hello, wp-users”.

Configurando a conexão com o banco de dados
O banco de dados da aplicação utiliza o SQLite (definido no momento que criamos o projeto), mas como vamos acessar o banco de dados de uma outra aplicação é preciso configurar essa conexão.
No Laravel 12, as configurações de banco de dados ficam no arquivo de configuração config/database.php2. Nesse arquivo de configuração já existe uma configuração criada para bancos MariaDB e será utilizada como referência para criar uma nova configuração responsável por se conectar com o banco do WordPress.
Então, no arquivo config/database.php será inserido o item wpdb. Atualize os valores de host, post, database, username e password com os dados da base de dados que você deseja conectar. No exemplo abaixo, o banco do WordPress está rodando localmente.
'connections' => [
[...]
'wpdb' => [
'driver' => 'mariadb',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'wp-test'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'password'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
]Nesse ponto, você deve ser capaz de conectar com o banco do WordPress. Apenas para testar, vamos atualizar a rota /wp-users para exibir o nome da base de dados:
Route::get('/wp-users', function () {
$connection = DB::connection('wpdb');
$connection->getPdo();
return 'Hello, wp-users in ' . $connection->getDatabaseName();
});Ao acessar a rota /wp-users, você deve obter como resultado Hello, wp-users in wp-test.
Outra forma de testar a conexão com o banco de dados é executando o comando db:table no terminal:
php artisan db:table --database wpdb wp_usersEsse comando deve exibir as informações sobre a tabela wp_users.
Interagindo com a tabela wp_users
No Laravel, para interagir com uma tabela da base dados é preciso criar um Model (modelo da arquitetura MVC – Model View Controller). O comando abaixo cria um model com o nome WpUser no diretório app/Models:
php artisan make:model WpUserO Laravel usa algumas convenções ao trabalhar com models3. Por exemplo, se o nome do model é WpUser, o Laravel entende que o nome da tabela é wp_users. No WordPress o prefixo da tabela (wp_) pode mudar e não seguir a convenção definida pelo Laravel. Dessa forma, o model WpUser será atualizado para informar ao Laravel a tabela, a chave primária e a conexão a ser usada.
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class WpUser extends Model
{
protected $table = 'wp_users';
protected $primaryKey = 'ID';
public $timestamps = false;
protected $connection = 'wpdb';
}Para testar, vamos atualizar a rota /wp-users para recuperar e exibir os usuários que estão no banco:
use App\Models\WpUser; // import the model
Route::get('/wp-users', function () {
return WpUser::all();
});Ao acessar a rota /wp-users, você deve obter como resultado um JSON com todos os usuários da tabela wp_users:

Note que o model retorna todos as colunas da tabela wp_users. No entanto, podemos omitir algumas colunas como user_pass e user_activation_key. Para isso, precisamos informar ao Laravel que essas colunas devem ser omitidas adicionando a propriedade $hidden 4ao modelo WpUser:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class WpUser extends Model
{
protected $table = 'wp_users';
protected $primaryKey = 'ID';
public $timestamps = false;
protected $connection = 'wpdb';
protected $hidden = ['user_pass', 'user_activation_key'];
}Resultado:

Melhorando a lista de usuários
A rota /wp-users está retornando um JSON. Vamos atualizá-la para retornar uma lista com o nome (user_nicename) e o e-mail (user_email) dos usuários:
use App\Models\WpUser; // import the model
Route::get('/wp-users', function () {
echo '<ul>';
foreach(WpUser::all() as $wpUser) {
echo '<li>' . $wpUser->user_nicename . ' - ' . $wpUser->user_email . '</li>';
}
echo '</ul>';
});O ideal é criar um Controller e uma View separada para apresentar a lista de usuários, mas para um teste rápido, vamos manter tudo no arquivo routes/web.php.
Resultado:
