Search by

jeffersongoncalves / laravel-wordpress

jeffersongoncalves

WordPress REST API integration for Laravel

Package info

github.com/jeffersongoncalves/laravel-wordpress

pkg:composer/jeffersongoncalves/laravel-wordpress

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-09-08 01:21 UTC

This package is auto-updated.

Last update: 2026-09-08 01:22:07 UTC


README

Laravel WordPress

Laravel WordPress

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads License

WordPress REST API integration for Laravel. A thin wrapper around the WordPress REST API covering posts, pages, media, categories, tags, comments and users, built on Laravel's HTTP client.

Installation

You can install the package via composer:

composer require jeffersongoncalves/laravel-wordpress

Publish the config file with:

php artisan vendor:publish --tag="laravel-wordpress-config"

This is the contents of the published config file:

return [
    'base_url' => env('WORDPRESS_BASE_URL'),
    'username' => env('WORDPRESS_USERNAME'),
    'application_password' => env('WORDPRESS_APPLICATION_PASSWORD'),
    'namespace' => env('WORDPRESS_NAMESPACE', 'wp-json/wp/v2'),
];

Generate an Application Password in WordPress under Users > Your Profile > Application Passwords, then add your credentials to .env:

WORDPRESS_BASE_URL=https://example.com
WORDPRESS_USERNAME=your-wordpress-username
WORDPRESS_APPLICATION_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx

Requests are authenticated with HTTP Basic (Authorization: Basic base64(username:application_password)), so the site must be served over HTTPS.

Usage

You can use the Wordpress facade, or inject Jeffersongoncalves\Wordpress\Wordpress wherever you need it.

Posts

use Jeffersongoncalves\Wordpress\Facades\Wordpress;

Wordpress::listPosts(['per_page' => 10, 'status' => 'publish']);
Wordpress::getPost(123);

Wordpress::createPost([
    'title' => 'Post Title',
    'content' => '<p>Post content here</p>',
    'status' => 'draft',
    'categories' => [1],
    'tags' => [5, 6],
]);

Wordpress::updatePost(123, ['title' => 'Updated Title', 'status' => 'publish']);

Wordpress::deletePost(123);              // moves to trash
Wordpress::deletePost(123, force: true); // deletes permanently

Post statuses: publish, draft, pending, private, future, trash.

Pages

Wordpress::listPages(['per_page' => 20]);
Wordpress::getPage(9);
Wordpress::createPage(['title' => 'About', 'content' => '<p>Hello</p>', 'status' => 'publish']);
Wordpress::updatePage(9, ['title' => 'About us']);
Wordpress::deletePage(9);

Media

Wordpress::listMedia(['per_page' => 20]);
Wordpress::getMedia(42);

Wordpress::uploadMedia(
    filename: 'image.jpg',
    contents: file_get_contents('/path/to/image.jpg'),
    mimeType: 'image/jpeg',
    attributes: ['post' => 123],
);

Wordpress::updateMedia(42, ['alt_text' => 'A description']);
Wordpress::deleteMedia(42);

Categories and tags

Wordpress::listCategories();
Wordpress::getCategory(1);
Wordpress::createCategory('Category Name', 'category-name');
Wordpress::updateCategory(1, ['description' => 'Updated']);
Wordpress::deleteCategory(1);

Wordpress::listTags();
Wordpress::getTag(5);
Wordpress::createTag('Tag Name', 'tag-name');
Wordpress::updateTag(5, ['description' => 'Updated']);
Wordpress::deleteTag(5);

Comments

Wordpress::listComments(['post' => 123]);
Wordpress::getComment(7);
Wordpress::createComment(['post' => 123, 'content' => 'Nice post']);
Wordpress::updateComment(7, ['status' => 'approved']);
Wordpress::deleteComment(7);

Users

Wordpress::listUsers(['per_page' => 10]);
Wordpress::getUser(1);
Wordpress::currentUser();

Every method returns an Illuminate\Http\Client\Response, so you can use ->json(), ->successful(), ->status(), etc. as usual. $filters and $attributes arrays are passed straight through to the REST API, so any parameter documented by WordPress is supported.

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.