WP-CLI: Praktische Befehle

WP-CLI ist ein Satz von Befehlen für die Verwaltung von WordPress-Installationen.

Das mächtige an CLI gesteuerten Dingen ist das wir Browser-Frei Dinge tun können.

Und Browser-Frei vereinfacht das Automatisieren von Dingen.

Ergo sind CLI Dinge cool.

TL;DR

Dieser Beitrag reflektiert den Stand von WP-CLI v2.4 (2020-12).

Befehl                                                             Beschreibung                                                                   
wp i18n make-json                                               Skript-Sprachdateien erstellen               
wp core update-db                                               WP Core Datenbank aktualisieren             
wp post delete $(wp post list --post_type='revision' --format=ids)Revisionen löschen                                       
wp rewrite flush                                                 Rewrite Rules flushen                                 
wp db export                                                     Datenbank exportieren                                 
wp search-replace                                               Datenbank Inhalte suchen/ersetzen
wp plugin activate                                               Plugins aktivieren                                       
wp user create {username} {email} --role=administrator           Admin erstellen                                             
wp user update {username} --user_pass="{password}"               Passwort ersetzen                       
wp shell                                                         Interaktive Shell öffnen                           
wp eval 'echo WP_CONTENT_DIR;'                                   PHP via CLI ausführen                 
wp eval-file AFile.php                                           PHP-Dateien via CLI ausführen                     

Skript-Sprachdateien erstellen

Damit wandelt WP-CLI einen Ordner aus PO-Dateien in JavaScript fähige Übersetzungen um.

wp i18n make-json languages/ --no-purge

Das Argument --no-purge stellt sicher das PO-Dateien unverändert bleiben.

Mit wp_set_script_translations setzen wir in WordPress die neuen Übersetzungen.

final class CustomScriptTranslationProvider
{
    /**
     * @var string 
     */
    private string $languagesPath;

    /**
     * @param string $languagesPath
     */
    public function __construct(string $languagesPath)
    {
        $this->languagesPath = $languagesPath;
    }

    /**
     * Verknüpft Übersetzungen und Skript-Handles.
     *
     * @return void
     */
    public function provide(): void
    {
        wp_set_script_translations(
            'handle',
            'domain',
            $this->languagesPath
        );
    }
}

// Initialisieren ein Objekt mit dem Sprach-Datei Ordner.
$customScripTranslationProvider = new CustomScriptTranslationProvider(
    plugin_dir_path(__FILE__).'languages'
);

add_action('init', [$customScripTranslationProvider, 'provide']);

WP Core Datenbank aktualisieren

Dieser Befehl stößt ein WP-Core Datenbank Update an.

Hilfreich, wenn aus Gründen der Befehl auf anderen Wegen nicht funktioniert.

wp core update-db

Multisite

wp core update-db --network

Revisionen löschen

Ein Weg um WordPress von Revisionen zu befreien, liefert wp post delete in Kombination mit wp post list.

wp post delete $(wp post list --post_type='revision' --format=ids)

Multisite

for URL in $(wp site list --field=url); do wp post delete $(wp post list --post_type='revision' --format=ids  --url="$URL") --url="$URL" --force; done

Rewrite Rules flushen

Die CLI-Alternative für flush_rewrite_rules()

wp rewrite flush

Multisite

for URL in $(wp site list --field=url); do wp rewrite flush --url="$URL"; done

Datenbank Inhalte suchen und ersetzen

Damit lassen sich Datenbank Inhalte von etwas in etwas anderes ersetzen.

Bevor du wild los ersetzt, bietet es sich ein Datenbank-Backup an:

wp db export

Sobald wir sicher sind, das Dinge wieder herstellbar sind, geht es los.

Zum Beispiel erzwingen wir HTTPS an allen „Domain“ URLs.

wp search-replace http://domain.com https://domain.com --all-tables

Das Argument --all-tables gilt auch für Multisites.

Obacht: Möchtest du Core Tabellen wie wp_options ignorieren, hast du zwei Möglichkeiten. Entweder entfernst du das Argument --all-tables oder nutzt das Argument --skip-tables=*_options*{,*_posts*}.

Plugins aktivieren

Um Plugins per CLI zu aktivieren:

wp plugin activate {plugin}

Unter Umständen können Plugins aufgrund eines Konflikts nicht aktiviert werden.

Um tiefer einzutauchen, wäre es praktisch das Plugin aktiv zu haben.

Daher liefert WP-CLI das Argument --skip-plugins.

wp plugin activate {plugin} --skip-plugins

Multisite

wp plugin activate {plugin} --network

Admin erstellen

Benutzerverwaltung über CLI.

Um einen Admin zu erstellen:

wp user create {username} {email} --role=administrator

Multisite

wp user create {username} {email} --role=administrator && wp super-admin add {username}

Passwort ersetzen

Ein Beispiel um einem Benutzer ein neues Passwort zu setzen:

wp user update {username} --user_pass="{password}"

Interaktive Shell öffnen

Öffnet eine interaktive PHP Konsole um Dinge zu testen / auszuführen.

wp shell
wp> get_bloginfo( 'name' );
=> string(18) "marceichenseher.de"

PHP via CLI ausführen

Neben der interaktiven Shell können wir mit eval PHP-Befehle ausführen.

Das praktische hier ist, das der Code weder im Plugin noch im Theme liegen muss, aber die komplette Palette an WordPress Funktionalitäten ansprechen kann.

wp eval erwartet eine Zeile an PHP-Befehlen:

wp eval 'echo WP_CONTENT_DIR;'

Wohin gegen wp eval-file eine PHP-Datei erwartet.

wp eval-file AFile.php

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert