Skip to content

nomad-mystic/wordpress-scaffold-cli

Repository files navigation

WordPress Scaffold CLI

Installation

$ npm i -g @nomadmystic/wordpress-scaffold-cli

NOTE: This packages uses node version >=18.x

Commands

Help:
$ wps --help
Initialize Project
$ wps --pi
$ wps --project-init

Uses the WP-CLI to download the core files, creates the config needed for DB if specified, scaffolds internal files/folders, generates/updates JSON configs, adds common development files, installs the core DB and admin user, and initializes a git repo if not one already.

  • User Prompts:
    • Project Name (String), Namespace of your WordPress site, used in namespacing PHP classes
    • Database Setup (Boolean), Asks if you have setup a local DB for the site (NOTE: WILL OVERWRITE DB at the moment)
      • Database Name (String), DB name
      • Database Password (String), DB password
      • Database Username (String), DB Username
    • Site Title (String), Used in wp core install command
    • Site Admin User (String), Admin user for the site
    • Admin Email (String), Admin email
    • Site Admin Password (String), Admin password for the site
    • Site Url (String), Production URL for your site
    • Dev Site Url (String), Development URL for your site

$ ws-scaffold-plugin (Future Release)

Initialize Theme
$ wps --t
$ wps --theme
  • User Prompts:
    • Project Name (String), Namespace of your WordPress site, used in namespacing PHP classes
    • Theme Name (String), Name of your theme
    • Theme Description (String), Description for your theme
    • FrontEnd Framework (Array['None', 'Vue.js 3']), Choose if you want Vue.js added to your project
    • Site Url (String), Production URL for your site
    • Dev Site Url (String), Development URL for your site

Bootstrap Class and hook reflection

In both the plugin and theme scaffolding I include a BootstrapClasses class which auto instantiates classes it finds in the composer.json psr-4 namespaces object.

This uses reflection to hook directly into the WordPress hook system.

Doc Properties:

@add_action 
@add_filter
@priority (optional, defaults to 10)

Examples:

Filter:
/**
 * @description This filters the content
 * @add_filter the_content 
 * 
 * @param string $content
 * @return string
 */
public function some_filter_method(string $content): string
{
    // Do something with content
    
    return $content;
}
Action:
/**
 * @description This enqueues scripts
 * @add_action wp_enqueue_scripts
 * 
 * @return void
 */
public function some_action_method(): void
{
    // Enqueue some scripts
}
Action with Priority:
/**
 * @description This enqueues scripts
 * @add_action wp_enqueue_scripts
 * @priority 100
 * 
 * @return void
 */
public function some_action_method(): void
{
    // Enqueue some scripts
}

Setup

Create WordPress Project

User will need to take care of setting up hosts and DNS. Not going to scaffold this because of 
varying local setups. i.e. apache/Nginx bare-metal, Docker e.t.c

DB Setup

$ sudo mysql
$ CREATE DATABASE <DATABSE_NAME>;
$ GRANT ALL PRIVILEGES ON <DATABSE_NAME>.* TO "<DATABASE_USER>"@"localhost" IDENTIFIED BY "<DATABASE_PASSWORD>";
$ FLUSH PRIVILEGES;
$ EXIT;

Project Setup

$ mkdir <YOUR_PROJECT_NAME>
$ cd <YOUR_PROJECT_NAME>
$ wps --project-init

Theme Setup

$ cd <YOUR_PROJECT_NAME>
$ wps --theme

Development

Initial Setup

$ git clone git@github.com:nomad-mystic/wordpress-scaffold-cli.git ./scaffold-cli
$ cd scaffold-cli
$ nvm use
$ npm i
$ npm run dev:tsc | npm run dev | npm run production:build 

Local dev commands

$ npm run dev:wps -- --version
$ npm run dev:wps -- --help
$ npm run dev:wps -- --project-init
$ npm run dev:wps -- --theme
$ npm run dev:wps -- --plugin

Package Testing

$ npm pack ./ --pack-destination="<PATH_TO_FOLDER>"
$ cd <PATH_TO_FOLDER>
$ npm i -g <PACKAGE_NAME>
$ cd <YOUR_PROJECT_NAME>
$ wps --help
$ wps --version

For testing this package in a non-WordPress root folder copy ./env.example to ./.env and update values

Resources

CLI command flow chart

cli-flow-chart.png

About

NPM package to scaffold WordPress themes and plugins

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published