WordPress boilerplate with Composer
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Language:Nix
Type:project
pkg:composer/nickkadutskyi/wp
Requires
- php: >=8.3
- ext-curl: *
- ext-exif: *
- ext-openssl: *
- symfony/dotenv: ^7.3
- symfony/flex: ^2.10
- wpackagist-plugin/akismet: dev-trunk
- wpackagist-theme/twentytwentyfive: *
Requires (Dev)
- humanmade/psalm-plugin-wordpress: ^3.1
- phpstan/phpstan: ^2.1
- szepeviktor/phpstan-wordpress: ^2.0
- vimeo/psalm: ^6.13
- wp-coding-standards/wpcs: ^3.3
- wpackagist-plugin/debug-bar: dev-trunk
- wpackagist-plugin/query-monitor: dev-trunk
README
WordPress boilerplate with Composer
- Manage configs via
.envfiles (symfony/dotenv) - WordPress core files are always separate from wp-content and are managed by WP-CLI
- Add your theme to
public/content/themes/
Getting Started
Installation
Requirements
- PHP >= 8.3
- Composer
- Apache or Nginx web server
- MySQL
Installing
-
Create a project using Composer:
composer create-project nickkadutskyi/wp my-wordpress-site cd my-wordpress-site -
Install WordPress core files using WP-CLI:
Install WP-CLI if you haven't already (see https://make.wordpress.org/cli/handbook/guides/installing/):
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Install WordPress core files:
bin/wp-install
This will install WordPress core version defined in
wp-cli.ymlinto thepublic/wpdirectory.See
wp-cli.ymlfor configuration details. -
Configure your environment variables:
Update
WP_HOMEin.env.$APP_ENVfiles for your environments (development, production, staging)Create
.env.$APP_ENV.localfiles with sensitive data like DB credentials and SALT keys.- DB credentials:
DB_NAME,DB_USER,DB_PASSWORD,DB_HOST - SALT keys:
AUTH_KEY,SECURE_AUTH_KEY,LOGGED_IN_KEY,NONCE_KEY,AUTH_SALT,SECURE_AUTH_SALT,LOGGED_IN_SALT,NONCE_SALT- You can generate SALT keys at https://api.wordpress.org/secret-key/1.1/salt/
- DB credentials:
-
Install WordPress using WP-CLI:
wp db create wp core install --url=https://yourwphome --title="Site Title" --admin_user=yourusername --admin_email=youremail # All third-party themes have `vendor-*` prefix to avoid name conflicts # So to enable Twenty Twenty-Five theme, use: wp theme activate vendor-twentytwentyfive
-
Configure your web server to point to the
publicdirectory as the document root. And now you can access Admin Dashboard at https://wphomeurl/wp/wp-admin/
Multisite Setup
Currently not automated.
Configuration
To modify configuration, edit .env or .env.$APP_ENV files.
See config/app.php for details on how environment variables are used.
APP_ENV variable defines the environment (development, production, staging).
APP_DEBUG variable enables debug mode when set to true or APP_ENV is not production.
If you need to add custom configuration, you can do it in config/app.php file.
Use .env.$APP_ENV to set environment-specific variables.
Use .env.$APP_ENV.local to set sensitive data like DB credentials and SALT keys during deployment.
Deployment
During deployment you will need to run the following commands:
To install Composer dependencies without dev packages and optimize autoloader:
composer install --no-dev --optimize-autoloader
Provide .env.production.local file with sensitive data like DB credentials and SALT keys on the server.
To generate .env.local.php file for better performance in production:
composer dump-env production
.env.local.php will be generated from .env .env.production and .env.production.local files.
Install WordPress core files if not already done:
bin/wp-install
If you updated the core you also need to update the database:
wp core update-db
(I will provide automated deployment scripts later)
Basics
Using Composer
Adding Plugins and Themes with Composer
Set Plugins as Must Use (mu-plugins)
Updating Plugins and Themes
Directory Structure
Server Setup
Apache
Set DocumentRoot to public directory
You may add .htaccess in public/ directory or into <Directory> section
of your Apache config the following content:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Nginx
Packages
symfony/dotenvis used to manage environment variablessymfony/flexis used forcomposer dump-envcommand to create.env.local.phpfile during deployment for better performance. You can remove it and use.envfiles directly if needed.phpstan,psalmwith their respective extensions for static analysiswp-coding-standards/wpcswith phpcs for code standards checkingwpackagist-{plugin,theme}for managing WordPress plugins and themes via Composer