Czym jest wp-cli?
Jak sama nazwa wskazuje jest to command line interface for wordpress, czyli narzędzie konsolowe dedykowane dla wordpressa. Pozwala na wykonywanie różnych czynności administracyjnych z poziomu linii poleceń. To z kolei daje możliwości do automatyzacji.
Jak skorzystać z tego rozwiązania?
Na początek musimy zadbać o to aby wp-cli zagościł w naszym środowisku deweloperskim.
W pierwszej kolejności pobierzmy archiwum na lokalną maszynę:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Jeśli wszystko przebiegło prawidłowo powinniśmy móc wykonać polecenie:
php wp-cli.phar --info
W następnym kroku zadbajmy o nadanie bitu wykonalności oraz przeniesienie biblioteki w odpowiednie miejsce:
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
W tym momencie mamy już wszystko co jest potrzebne do naszej zabawy.
Jakie dokładnie czynności możemy wykonać?
WP-CLI jest bardzo użyteczny w wielu przypadkach. Najlepiej się sprawdza podczas wykonywania rutynowych czynności i tam też jest najczęściej wykorzystywany:
- instalacji pluginów
- aktualizacji pluginów oraz samego wordpressa
- instalacji wordpress
- konfiguracji
- zarządzania użytkownikami
- tworzenia własnych poleceń
Poniżej przedstawię kilka wybranych scenariuszy, które najlepiej demonstrują możliwości tego narzędzia.
WordPress od zera, czyli instalujemy czystą instancję
W pracy dewelopera wordpress gdy przychodzi nowy projekt, musimy poświęć kilka chwil na przygotowanie świeżej instalacji wp wraz z kilkoma standardowymi wtyczkami, z których najczęściej korzystamy. WP-CLI ułatwia nam ten proces ograniczając go do minimum.
W pierwszej kolejności musimy zadbać o ściągnięcie paczki wordpress w najświeższej wersji. Tu z pomocą przyjdzie nam polecenie:
wp core download --locale=pl_PL
Wszystkie zadania związane z silnikiem wordpress naszej aplikacji są poprzedzone poleceniem core. W tym przypadku zadbaliśmy również o to, aby pobrana została paczka w odpowiedniej wersji językowej.
Teraz przyszedł czas na instalację, ale zanim do tego dojdziemy musimy zadbać o stworzenie konfiguracji dla naszego WordPressa.
wp config create --dbname=db_test --dbuser=user_test --dbpass=test_pwd
wp core install --url=test.local.pl --title='Zupełnie nowa strona www' --admin_user=admin_account [email protected]
W ten sposób stworzyliśmy plik konfiguracyjny wp-config.php oraz zainstalowaliśmy aplikację podając jednocześnie wszystkie niezbędne informacje na temat adresu nowej strony, jej tytułu oraz administratora. Wynikiem działania tego polecenia będzie zwrócone na ekran hasło admina nowej witryny.
Teraz możemy przejść do instalacji wtyczek, bez których nie możemy się obyć. Wystarczy wydać kilka poleceń, aby wtyczka została pobrana z repozytorium a następnie została aktywowana.
wp plugin install wordfence
wp plugin activate wordfence
Jak zapewne się domyślasz w podobny sposób można wyłączać wtyczki, co jest sporym atutem w trakcie prób rozwiązywania problemów z WordPress.
W tym momencie mamy do dyspozycji w pełni działającą świeżą instalację WordPress. Jak widać można w prosty sposób, przy użyciu zmiennych środowiskowych pokusić się o przygotowanie skryptu, który wykonałby całe zadanie automatycznie.
Przejdźmy zatem płynnie do następnego scenariusza.
Zarządzanie użytkownikami
Bardzo często zdarza się, że ktoś zagubi hasło do swojego konta w ramach WordPress. Wtedy przychodzi nam najczęściej z pomocą systemem przypominania hasła. Nie zawsze jednak mamy możliwości skorzystania z tej opcji. Przyczyną może być nieprawidłowe skonfigurowanie transportu wiadomości email, albo system WAF który nas zablokował. W takiej sytuacji mamy dwie opcje, albo ręczne grzebanie w bazie danych albo skorzystanie z interfejsu konsolowego.
wp user update 1 --user_pass=zupelnienowehaslo123
W ten sposób dokonaliśmy aktualizacji hasła dla użytkownika o identyfikatorze równym 1. Tylko skąd mamy wiedzieć jakie ID ma użytkownik, któremu chcemy nadać nowe hasło. Tutaj z pomocą przychodzi inne polecenie związane z użytkownikami, które wydrukuje na ekranie dla nas listę.
wp user list
Jeśli nie chcemy dokonywać odgórnej zmiany hasła, możemy również zapoczątkować procedurę jego odzyskania. Nic prostszego, wystarczy wykonać polecenie
wp user reset-password [email protected]
W ten sposób wskazany użytkownik otrzyma odpowiednią wiadomość e-mail. WP-CLI daje nam pełną kontrolę użytkownikami w systemie. Możemy tworzyć nowe konta, usuwać je, modyfikować uprawnienia, wygaszać sesje, zarządzać rolami. Ciekawą opcją jest również import z pliku csv.
Najbardziej interesującą z mojego punktu widzenia opcją jaką dostarcza nam WP-CLI jest rozszerzanie tego narzędzia o własne polecenia.
Tworzenie własnych poleceń
Menadżer zadań, który jest wbudowany w WordPress ma swoje wady i zalety. Na pewno jest to rozwiązanie, które sprawdza się przy mało wymagających procedurach, gdy nie ma dostępu do tablicy CRON serwera. W domyślnej konfiguracji nie daje przejrzystego obrazu na temat tego, kiedy i jak dane zadanie ma być wykonywane. W sytuacji gdy do wykonania jest proces, które potrzebuje sporo zasobów, nie jest rozsądnym opieranie się o wbudowany system. Dużo lepiej sprawdza się tutaj WP-CLI wraz z własnym taskami.
Całość sprowadza się do kilku linii w kodzie aplikacji. Musimy zadbać o to, aby kod został załączony do pliku functions.php. Najrozsądniej jest stworzyć osobny plik, który przechowywać będzie logikę naszego zadania.
if ( class_exists( 'WP_CLI' ) ) {
WP_CLI::add_command('my-custom-command', 'my_custom_command_function_name');
}
Na początku konieczne jest sprawdzenie czy klasa WP_CLI istnieje. Dzięki temu mamy pewność, że kod będzie wykonany tylko z kontekstu linii poleceń oraz interfejsu WP-CLI. Gdybyśmy o to nie zadbali, to prowadziłoby to błędów przy próbie wywołania jakiejkolwiek podstrony serwisu.
Funkcja add_command przyjmuje dwa argumenty. Pierwszym jest nazwa zadania, które będziemy wykonywać z poziomu WP-CLI, drugi zaś to nazwa funkcji, która ma być wykonana. Można tutaj również posłużyć się konstrukcją znaną z wordpress, gdzie w drugim argumencie przekazujemy funkcję anonimową.
Aby wykonać przed chwilą zdefiniowane polecenie wystarczy z poziomu cli uruchomić:
wp my-custom-command
W ten sposób, otwierają się przed nami zupełnie nowe możliwości rozbudowy naszej aplikacji. Można sobie wyobrazić, że dzięki takiemu podejściu jesteśmy w stanie sprawnie przygotować mechanizmy importu/eksportu danych, kolejki oraz szereg innych konstrukcji.
Podsumowanie
WP-CLI jest jest niezwykle użytecznym narzędziem w rękach dewelopera. Dzięki niemu możemy usprawnić sobie pracę z WordPress jak również budować bardziej zaawansowane konstrukcje. Bardzo często można też się spotkać z implementacją automatyzacji zadań typu ci/cd w oparciu o WP-CLI. Aby lepiej poznać możliwości tej biblioteki zachęcam do odwiedzin strony projektu https://wp-cli.org/.