WordPlate
WordPlate is simply a wrapper around WordPress. It makes developers life easier. It is just like building any other WordPress website with themes and plugins. Just with sprinkles on top.
- Features
- Installation
- Configuration
- Plugins
- Laravel Mix
- Integrations
- Upgrade Guide
- FAQ
- Acknowledgements
- Contributing
Features
-
WordPress + Composer =
♥️ WordPress is installed using Composer which allows WordPress to be updated by running
composer update. -
Environment Files
Similar to Laravel, WordPlate puts environment variables within an
.envfile such as database credentials. -
WordPress Packagist
With WordPress Packagist you may manage your WordPress plugins and themes with Composer.
-
Must-use plugins
Don't worry about client deactivating plugins, must-use plugins is enabled by default.
-
Mail
If you want to use custom SMTP credentials to send emails, we've a package for that!
-
Laravel Mix
With Laravel Mix you can quickly get up and running with Webpack to build and minify your CSS and JavaScript.
-
Debugging
Familiar debugging helper functions are integrated such as
dump()anddd(). -
Security
With the
roots/wp-password-bcryptpackage we've replaced WordPress outdated and insecure MD5-based password hashing with the modern and secure bcrypt.
Installation
To use WordPlate, you need to have PHP 7.3+ and MySQL 5.7+ installed on your machine.
WordPlate utilizes Composer to manage its dependencies. So, before using WordPlate, make sure you have Composer installed on your machine.
Install WordPlate by issuing the Composer create-project command in your terminal:
composer create-project --prefer-dist wordplate/wordplate blog
Update the database credentials in the .env file:
DB_NAME=database
DB_USER=username
DB_PASSWORD=password
Serve your application using the built-in web server in PHP (or your server of choice) from the public directory:
php -S localhost:8000 -t public/
Visit your application in the browser:
http://localhost:8000/- Your website.http://localhost:8000/wordpress/wp-admin- The administration dashboard.
Configuration
Public Directory
After installing WordPlate, you should configure your web server's document / web root to be the public directory. The index.php in this directory serves as the front controller for all HTTP requests entering your application.
Salt Keys
The next thing you should do after installing WordPlate is adding salt keys to your environment file.
Typically, these strings should be 64 characters long. The keys can be set in the .env environment file. If you have not copied the .env.example file to a new file named .env, you should do that now. If the salt keys isn't set, your user sessions and other encrypted data will not be secure.
If you're lazy like us, visit our salt key generator and copy the randomly generated keys to your .env file.
Environment Configuration
It is often helpful to have different configuration values based on the environment where the application is running. For example, you may wish to use a different database locally than you do on your production server.
To make this a cinch, WordPlate utilizes the Dotenv PHP package. In a fresh WordPlate installation, the root directory of your application will contain a .env.example file. If you install WordPlate via Composer, this file will automatically be renamed to .env. Otherwise, you should rename the file manually.
Your .env file should not be committed to your application's source control, since each developer / server using your application could require a different environment configuration. Furthermore, this would be a security risk in the event an intruder gains access to your source control repository, since any sensitive credentials would get exposed.
Read more about environment variables in Laravel's documentation:
Plugins
WordPress Packagist
We've integrated WordPress Packagist which makes it possible to install plugins with Composer. WordPress Packagist mirrors the WordPress plugin and theme directories as a Composer repository.
Install the desired plugins using wpackagist-plugin as the vendor name. Packages are installed in the public/plugins directory.
composer require wpackagist-plugin/hide-updates
This is an example of how your composer.json file might look like:
"require": {
"wordplate/framework": "^9.4",
"wpackagist-plugin/hide-updates": "^1.0"
},
Please visit WordPress Packagist for more information and examples.
Must Use Plugins
Must-use plugins (a.k.a. mu-plugins) are plugins installed in a special directory inside the content folder and which are automatically enabled on all sites in the installation.
To install plugins into into the mu-plugins directory, add the plugin name to the installer-paths in your composer.json file:
"installer-paths": {
"public/mu-plugins/{$name}": [
"type:wordpress-muplugin",
"wpackagist-plugin/hide-updates",
]
}
Install the plugin using wpackagist-plugin as the vendor name.
composer require wpackagist-plugin/hide-updates
The plugin should now be installed in the public/mu-plugins directory.
Read more about the must-use plugin autoloader in the documentation.
Laravel Mix
Laravel Mix is a clean layer on top of Webpack to make the 80% use case laughably simple to execute. Most would agree that, though incredibly powerful, Webpack ships with a steep learning curve. But what if you didn't have to worry about that?
To get started with Laravel Mix, please visit the documentation.
// Run all mix tasks...
npm run dev
// Run all mix tasks and minify output...
npm run build
Integrations
Below you'll find a list of plugins and packages we use with WordPlate. Some of these projects are maintained by WordPlate and some are created by other amazing developers.
-
The package integrates Blade templating system in WordPress.
-
The plugin removes special characters from filenames.
-
The package provides an object oriented API to register fields, groups and layouts with ACF.
-
The package provides extended functionality to WordPress custom post types and taxonomies.
-
The plugin removes a lot of default WordPress stuff you just can't wait to get rid of.
-
The plugin hides update notices for updates in WordPress.
-
The plugin provides a simple way to add custom SMTP credentials.
Upgrade Guide
Upgrading from 8 to 9
-
Bump the version number in the
composer.jsonfile to^9.0. -
Copy the
public/mu-plugins/mu-plugins.phpfile into your project. -
Update the
public/.gitignorefile to allow the newmu-plugins.phpfile:-mu-plugins/ +mu-plugins/* +!mu-plugins/mu-plugins.php
-
Run
composer updatein the root of your project and your app should be up and running!
Upgrading from 7 to 8
-
WordPlate now requires PHP 7.2 or later.
-
Bump the version number in the
composer.jsonfile to^8.0.Note: WordPlate 8.0 requires WordPress 5.3 or later.
-
Laravel's helper functions is now optional in WordPlate. If you want to use the functions, install the
laravel/helperspackage, with Composer, in the root of your project:composer require laravel/helpers
-
Laravel's collections are now optional in WordPlate. If you want to use collections, install the
tightenco/collectpackage, with Composer, in the root of your project:composer require tightenco/collect
-
The
mixhelper function is now optional in WordPlate. If you want to use the function, install theibox/mix-functionpackage, with Composer, in the root of your project:composer require ibox/mix-function
-
Replace any usage of
asset,stylesheet_urlandtemplate_urlfunctions with WordPress'sget_theme_file_urifunction. -
Replace any usage of
stylesheet_pathandtemplate_pathfunctions with WordPress'sget_theme_file_pathfunction . -
The
base_pathandtemplate_slugfunctions have been removed. -
Run
composer updatein the root of your project and your app should be up and running!
Upgrading from 6 to 7
-
Bump the version number in the
composer.jsonfile to^7.0.Note: WordPlate 7.0 requires WordPress 5.0 or later.
-
Update the
realpath(__DIR__)torealpath(__DIR__.'/../')in thewp-config.phpfile. -
If your public directory isn't named
public, add the following line to thewp-config.phpfile:$application->setPublicPath(realpath(__DIR__));
-
Run
composer updatein the root of your project and your app should be up and running!
Upgrading from 5 to 6
-
Bump the version number in the
composer.jsonfile to^6.0. -
Update the
realpath(__DIR__.'/../')torealpath(__DIR__)in thewp-config.phpfile. -
Run
composer updatein the root of your project and your app should be up and running!
Upgrading from 4 to 5
-
Bump the version number in the
composer.jsonfile to^5.0. -
Copy and paste the contents of the
wp-config.phpfile into your application.Note: Make sure you don't overwrite any of your custom constants.
-
Run
composer updatein the root of your project and your app should be up and running!
FAQ
Can I add WordPress constants to the environment file?
This is possible by updating the public/wp-config.php file after the WordPlate application have been created.
$application->run();
+define('WP_ALLOW_MULTISITE', env('WP_ALLOW_MULTISITE', true));
$table_prefix = env('DB_TABLE_PREFIX', 'wp_');
Then you may add the constant to the .env file.
WP_DEFAULT_THEME=wordplate
+WP_ALLOW_MULTISITE=true
Can I rename the public directory?
If you want to rename the public directory you'll need to add the following line to the wp-config.php file:
$application->setPublicPath(realpath(__DIR__));
Please note that you also have to update your composer.json file with your new public directory path before you can run composer update again.
Can I rename the WordPress directory?
By default WordPlate will put the WordPress in public/wordpress. If you want to change this there are a couple of steps you need to go through. Let's say you want to change the default WordPress location to public/wp:
-
Update the
wordpress-install-dirpath in yourcomposer.jsonfile. -
Update
wordpresstowpinwordplate/public/.gitignore. -
Update the last line in the
public/index.phpfile to:require __DIR__.'/wp/wp-blog-header.php';
-
Update the
WP_DIRenvironment variable in the.envfile towp. -
If you're using WP-CLI, update the path in the
wp-cli.ymlfile topublic/wp. -
Remove the
public/wordpressdirectory if it exist and then runcomposer update.
Can I rename the theme directory?
For most applications you may leave the theme directory as it is. If you want to rename the wordplate theme to something else you'll also need to update the WP_THEME environment variable in the .env file.
Can I use WordPlate with Laravel Valet?
If you're using Laravel Valet together with WordPlate, you may use our local valet driver. Create a file named LocalValetDriver.php in the root of your project and copy and paste the class below:
declare(strict_types=1);
final class LocalValetDriver extends BasicValetDriver
{
public function serves(string $sitePath): bool
{
return is_dir($sitePath . '/vendor/wordplate/framework');
}
/**
* @return false|string
*/
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
$staticFilePath = $sitePath . '/public' . $uri;
if ($this->isActualFile($staticFilePath)) {
return $staticFilePath;
}
return false;
}
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
$_SERVER['PHP_SELF'] = $uri;
$_SERVER['SERVER_NAME'] = $_SERVER['HTTP_HOST'];
if (strpos($uri, '/wordpress/') === 0) {
if (is_dir($sitePath . '/public' . $uri)) {
$uri = $this->forceTrailingSlash($uri);
return $sitePath . '/public' . $uri . '/index.php';
}
return $sitePath . '/public' . $uri;
}
return $sitePath . '/public/index.php';
}
private function forceTrailingSlash(string $uri): string
{
if (substr($uri, -1 * strlen('/wordpress/wp-admin')) == '/wordpress/wp-admin') {
header('Location: ' . $uri . '/');
die;
}
return $uri;
}
}
Acknowledgements
WordPlate wouldn't be possible without these amazing open-source projects.



To resolve this issue add this line