Es gibt mehrere Wege um eigene WP-CLI-Befehle zu nutzen. Dieser Artikel zeigt, wie man in wenigen Schritten eine benutzerdefinierte wp-cli.phar erstellt, die die gewünschten Befehle integriert, die bspw. auf GitHub liegen. Dafür werden ein Shell- und ein PHP-Skript verwendet, die im gleichen Verzeichnis liegen. Diese findet man in diesem Repository.
Das Entwickeln eines eigenen WP-CLI-Befehls wird in diesem Artikel nicht behandelt.
PHP-Skript (make-custom-phar.php)
Das Repository wp-cli/wp-cli-bundle
liefert alles mit, um eine Phar-Datei für die offizielle WP-CLI zu bauen. Im Ordner utils/ liegt eine Datei namens make-phar.php. Diese erzeugt die wp-cli.phar im Hauptverzeichnis. Sie wird in den GitHub-Actions des Repositories mit folgendem Befehl aufgerufen:
php -dphar.readonly=0 utils/make-phar.php wp-cli.phar --version=$CLI_VERSION
Ist die Phar-Datei gebaut, kann man weitere Dateien hinzufügen, welche für die eigenen Befehle notwendig sind. Das nachfolgende Skript nutzt die make-phar.php, baut damit die wp-cli.phar, findet die gewünschten Dateien und fügt diese der Phar-Datei hinzu.
<?php
// make-phar.php einbinden und wp-cli.phar bauen
require 'make-phar.php';
// Dateien finden, die hinzugefügt werden sollen
use Symfony\Component\Finder\Finder;
$finder = new Finder();
$finder
->files()
->ignoreVCS( true )
->name( '/\.*.php8?/' )
->in( WP_CLI_VENDOR_DIR . '/angelocali' )
->notName( 'behat-tags.php' )
->notPath( '#(?:[^/]+-command|php-cli-tools)/vendor/#' )
->exclude( 'config' )
->exclude( 'debug' )
->exclude( 'dependency-injection' )
->exclude( 'event-dispatcher' )
->exclude( 'translation' )
->exclude( 'yaml' )
->exclude( 'examples' )
->exclude( 'features' )
->exclude( 'test' )
->exclude( 'tests' )
->exclude( 'Test' )
->exclude( 'Tests' );
// Dateien hinzufügen
foreach ( $finder as $file ) {
add_file( $phar, $file );
}
// Optional: Ausgabe hinzufügen
if ( ! BE_QUIET ) {
echo "Added Custom Commands\n";
}
Code-Sprache: PHP (php)
In Zeile 14 ist die Angabe des Verzeichnisses, in dem der eigene Befehl liegt. Falls der Befehl Abhängigkeiten zu Bibliotheken hat, werden diese auch auf diese Weise hinzugefügt. Es ist empfehlenswert sich bei der Erweiterung des Skripts an der make-phar.php zu orientieren.
Die Verwendung der Finder-Klasse ist optional. Sie wurde hier der Einfachheit verwendet, weil diese auch in der make-phar.php genutzt wird.
Damit sind die Vorbereitungen getroffen, um mit dem Build-Skript eine benutzerdefinierte Phar-Datei zu bauen.
Build-Skript (build-script.sh)
Zusammengefasst lädt das Build-Skript das wp-cli/wp-cli-bundle-Repository herunter, konfiguriert das Composer-Projekt, lädt den eigenen Befehl herunter, kopiert die make-custom-phar.php an eine geeignete Stelle und führt den Befehl zur Erstellung der Phar-Datei in leicht abgewandelter Form aus. Die einzelnen Schritte sind im Code-Beispiel erklärt:
rm -rf wp-cli-bundle
# wp-cli/wp-cli-bundle herunterladen
composer create-project wp-cli/wp-cli-bundle
# make-custom-phar.php in gewünschten
# Ordner kopieren
cp make-custom-phar.php wp-cli-bundle/utils/make-custom-phar.php
cd wp-cli-bundle
# Composer-Projekt konfigurieren für
# require eines Custom Repos
composer config repositories.hello-command vcs https://github.com/angelocali/hello-command.git
rm composer.lock
composer require "angelocali/hello-command"
CLI_VERSION=$(head -n 1 vendor/wp-cli/wp-cli/VERSION)
# Phar-Datei bauen
php -dphar.readonly=0 utils/make-custom-phar.php wp-cli.phar --version=$CLI_VERSION
Code-Sprache: Bash (bash)
Nachdem die build-script.sh ausgeführt wurde, liegt die wp-cli.phar-Datei im wp-cli-bundle-Verzeichnis.
Damit ist mein erster Blog-Artikel verfasst. Ich freue mich über eure Kommentare.
Quellen
https://github.com/wp-cli/wp-cli-bundle
https://getcomposer.org/doc/03-cli.md#require
https://getcomposer.org/doc/03-cli.md#config
https://github.com/angelocali/build-custom-wp-cli-phar
https://github.com/angelocali/hello-command
Danksagungen
Vielen Dank an Matthias Pfefferle und Florian Brinkmann für die Inspiration zu dieser Lösung.
6 Kommentare
Likes
Reposts