Skip to main content

Commands

Introduction

Mantle provides a wp-cli integration to help make writing commands easier. This will guide you through creating a command and interacting with input.

Writing Commands

Commands live in the app/console directory.

Generating a Command

wp mantle make:command <name>

Registering a Command

Commands can be added to the app/console/class-kernel.php file in your application.

namespace App\Console;

use Mantle\Console\Kernel as Console_Kernel;

/**
* Application Console Kernel
*/
class Kernel extends Console_Kernel {
/**
* The commands provided by the application.
*
* @var array
*/
protected $commands = [
Command_To_Register::class,
];
}

Command Structure

After generating a command, you should verify the $name and $synopsis properties which determine the name and arguments/flags for the command, respectively. The $synopsis property is the wp-cli definition of the command's arguments (reference the wp-cli documentation). The Mantle Service Container will automatically inject all dependencies that are type-hinted in the class. The following command would be registered to wp mantle example_command:

namespace App\Console;

use Mantle\Console\Command;

/**
* Example_Command Controller
*/
class Example_Command extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'example_command';

/**
* Command Short Description.
*
* @var string
*/
protected $short_description = '';

/**
* Command Description.
*
* @var string
*/
protected $description = '';

/**
* Command synopsis.
*
* Supports registering command arguments in a string or array format.
* For example:
*
* <argument> --example-flag
*
* @var string|array
*/
protected $synopsis = '';

/**
* Callback for the command.
*
* @param array $args Command Arguments.
* @param array $assoc_args Command flags.
*/
public function handle( array $args, array $assoc_args ) {
// Write to the console.
$this->log( 'Message to write.' );

// Error to the console.
$this->error( 'Error message but does not exit without the second argument being true' );

// Ask for input.
$question = $this->prompt( 'Ask a question?' );
$password = $this->secret( 'Ask a super secret question?' );

// Get an argument.
$arg = $this->argument( 'name-of-the-argument', 'Default Value' );

// Get a flag.
$flag = $this->flag( 'flag-to-get', 'default-value' );
}
}