Mengelola Lingkungan Pengembang WordPress Dengan WP-CLI dan Robo
Diterbitkan: 2022-09-13
Mengotomatiskan tugas berulang adalah salah satu cara terbaik untuk menghemat waktu dalam alur kerja pengembangan Anda. Dalam pekerjaan sehari-hari saya sebagai pengembang plugin, saya sering harus mengatur ulang database, menginstal ulang versi WordPress tertentu, menginstal satu atau lebih plugin, dan memperbarui pengaturan. Ini cepat melelahkan, jadi ini cocok untuk otomatisasi. Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana saya menggunakan WP-CLI dalam kombinasi dengan Robo untuk mengotomatisasi tugas-tugas yang diperlukan untuk mengelola lingkungan pengembangan WordPress saya.
Alat baris perintah WordPress, WP-CLI, adalah awal yang baik untuk mempercepat alur kerja Anda. Jika Anda tidak terbiasa dengannya, saya sangat merekomendasikan membaca salah satu dari banyak posting blog kami. Panduan instalasi kami adalah titik awal yang bagus, menjelaskan cara menginstalnya di OS Anda, mengatur penyelesaian tab, dan membuat file konfigurasi.
Daftar isi
- Apa itu Robo?
- Robo Menyederhanakan Baris Perintah PHP
- Memasang Robo
- Perintah Pertama Anda
- Masukan dan keluaran
- Pembantu Hebat
- Manfaat Robo
- Mempertahankan WordPress Dengan Robo
- File Penting
- Lingkungan saya
- Pengguna Basis Data
- Server Web
- Merawat Ketergantungan
- Memanfaatkan wp-cli.yml
- Apa Itu Alias di WP-CLI?
- Default Perintah
- Membuat Perintah Robo Kustom
- Konfigurasi Perintah
- Perintah
reset
- Langkah-Langkah Pasca-Instal
- Komando
profile
- Membungkus
Apa itu Robo?
Robo adalah task runner modern open source yang digunakan oleh sejumlah proyek termasuk Drush dan Codeception.
Robo mirip dengan Gulp dan Grunt, tetapi menggunakan PHP daripada JavaScript.
Idenya adalah Anda dapat membuat perintah kecil yang bagus seperti ini:
# Setel ulang lingkungan dev WP saya dan buat multisite robo reset --multi # Instal dan atur plugin WP Offload Media profil robo ome-dev
Pelari tugas Robo memudahkan untuk mendokumentasikan perintah yang Anda buat dengan menambahkan komentar DocBlock ke perintah Anda, sehingga Anda dapat memberikan bantuan untuk versi Anda yang akan datang:
# Robo tanpa argumen akan menampilkan perintah yang tersedia. robot Perintah yang tersedia: help Menampilkan bantuan untuk sebuah perintah daftar Daftar perintah profile Jalankan satu set perintah wp-cli pada lingkungan WordPress yang ada reset Setel ulang lingkungan WordPress ke status yang diketahui
Meminta info lebih lanjut tentang perintah tertentu:
robo membantu mengatur ulang Keterangan: Setel ulang lingkungan WordPress ke status yang diketahui. Membaca lingkungan dan konfigurasi dari robo.yml Penggunaan: setel ulang [opsi] Pilihan: --env[=ENV] Lingkungan (dev, test dll) [default: "dev"] --multi Buat instalasi multi situs --ver[=VER] versi WordPress [default: "terbaru"]
Saya telah membuat beberapa perintah hebat dengan Robo yang saya gunakan setiap hari untuk mengelola lingkungan pengembangan WordPress saya. Pada artikel ini, saya akan membagikan perintah ini dengan Anda dan memberikan pengantar perintah Robo di sepanjang jalan.
Robo Menyederhanakan Baris Perintah PHP
Mari kita periksa kaca spion sedikit saja. Menulis perintah baris perintah PHP tentu bukan hal baru. Itu selalu memungkinkan untuk menjalankan skrip PHP dari baris perintah seperti ini:
php myscript.php
Dan PHP telah tersedia sebagai lingkungan baris perintah di sebagian besar lingkungan *NIX selama yang saya ingat. Menambahkan PHP shebang akan berfungsi di sebagian besar lingkungan yang memiliki penerjemah PHP terinstal.
// file: myscript #!/usr/bin/env php <?php // do stuff here…
Yang memungkinkan untuk mengeksekusi skrip dari baris perintah tanpa menentukan bahwa skrip harus diurai oleh PHP (atau termasuk ekstensi file .php):
naskah saya
Kelemahan menjalankan skrip PHP mentah dari baris perintah adalah ada cukup banyak overhead untuk input dan output yang harus diperhatikan di setiap skrip. Proses menerima argumen dari baris perintah, dan kemudian mengeluarkan pesan ke baris perintah agak rumit dan tidak terasa sangat fleksibel.
Robo bertujuan untuk mempermudah penulisan baris perintah PHP dengan menangani banyak "pipa ledeng" standar yang dibutuhkan sebagian besar skrip. Ini memungkinkan Anda fokus pada fungsionalitas inti skrip Anda.
Memasang Robo
Anda harus menginstal Robo sebelum kami dapat memulai. Saya tetap menginstal Robo secara global di mesin saya, jadi saya menginstalnya seperti ini:
komposer global membutuhkan konsolidasi/robo
Tetapi seperti apa pun yang diinstal melalui Komposer, Anda dapat menyimpannya sebagai ketergantungan proyek jika Anda lebih nyaman dengan itu. Atau, GitHub memiliki instruksi untuk menginstalnya dengan mengunduh robo.phar
.
Perintah Pertama Anda
Pertama, kita perlu menginisialisasi Robo di folder proyek:
cd /path/ke/proyek saya robo init
Ini benar-benar hanya membuat RoboFile.php
baru di folder Anda dengan konten berikut:
<?php class RoboFile extends \Robo\Tasks { }
Untuk menambahkan perintah pertama kami, kami hanya menambahkan metode publik:
<?php class RoboFile extends \Robo\Tasks { public function hello($world) { $this->say("Hello, $world"); } }
Seperti yang mungkin bisa Anda tebak, metode di atas membuat perintah hello
dan hanya menampilkan pesan di layar.
Parsing Argumen
Hanya menambahkan metode seperti yang kami lakukan di atas adalah cara yang bagus untuk menunjukkan salah satu alasan penting mengapa saya menyukai Robo, yaitu mengurai argumen baris perintah.
Untuk menunjukkan kepada Anda apa yang saya maksud, mari kita coba menjalankan perintah ini:
robo halo Argumen tidak cukup (tidak ada: "dunia"). halo [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [ -n|--tidak -interaksi] [--simulate] [--progress-delay PROGRESS-DELAY] [-D|--define DEFINE] [--]
Ah! Robo memberi saya pesan kesalahan karena perintah hello
sebenarnya mengharapkan parameter $world
dan kemudian mulai menulis sintaks penggunaan penuh untuk perintah tersebut.
Mari ubah metode sedikit dan jadikan parameter opsional:
public function hello($world = 'from Robo') { $this->say("Hello, $world"); }
…dan sekarang mari kita jalankan lagi:
# Tanpa argumen robo halo Halo, dari Robo # Dengan argumen sederhana robo halo di sana! Halo! # Dengan arg yang mengandung spasi robo halo "Saya tinggal di baris perintah" Halo, saya tinggal di baris perintah
Itu lebih baik! Dengan membuat parameter opsional, Robo sekarang dengan senang hati mengeksekusi metode kami bahkan tanpa memberikan argumen. Kami juga telah melihat bahwa kami dapat memberikan argumen sederhana dan argumen dalam tanda kutip dan itu hanya berfungsi.
Jika Anda pernah menghabiskan waktu menulis argumen memeriksa logika untuk skrip baris perintah, Anda mungkin menyadari mengapa ini adalah fitur yang bagus. Itu hanya menghilangkan banyak rasa sakit.
Contoh perintah hello
menggunakan satu argumen posisi tunggal. Robo juga mendukung penggunaan flag dan argumen bernama dengan membuat argumen array dengan beberapa nilai default.
Mari kita ubah fungsi lebih lanjut untuk mencetak beberapa karakter tambahan secara opsional:
public function hello( $world = 'from Robo', $flags = [ 'stars' => false, 'stripes' => false ] ) { if ( $flags['stars'] ) $this->say( '***************' ); if ( $flags['stripes'] ) $this->say( '===============' ); $this->say( "Hello, $world" ); if ( $flags['stripes'] ) $this->say( '==============='); if ( $flags['stars'] ) $this->say( '***************' ); }
Ini akan memberi tahu Robo bahwa kami dapat secara opsional meneruskan argumen bernama menggunakan tanda hubung ganda:
# Hanya dengan memasukkan argumen bernama, maka akan mendapatkan nilai 'true' robo halo --bintang *************** Halo, dari Robo ***************
Masukan dan keluaran
Kami juga telah melihat contoh menggunakan IO. Fungsi say()
dari objek tugas Robo hanya mengeluarkan string kembali ke pengguna. Ada juga fungsi ask()
yang memungkinkan Anda meminta input dari pengguna:
public function hello() { $word = $this->ask("Tell me what to say:"); $this->say( $word ); }
robo halo ? Katakan apa yang harus saya katakan: foobar foobar
Robo menggunakan Symfony Console untuk membuat interaksi pengguna. Ini berarti bahwa selain dua fungsi say()
dan ask()
sederhana, kami memiliki akses ke fungsi apa pun dari Symfony Console, seperti table()
:
public function table() { $this->io()->table( ['Header 1', 'Header 2'], [ ['Cell 1-1', 'Cell 1-2'], ['Cell 2-1', 'Cell 2-2'], ['Cell 3-1', 'Cell 3-2'], ] ); }
meja robot ---------- ---------- Tajuk 1 Tajuk 2 ---------- ---------- Sel 1-1 Sel 1-2 Sel 2-1 Sel 2-2 Sel 3-1 Sel 3-2 ---------- ----------
Cukup keren, ya?
Pembantu Hebat
Alasan lain untuk menyukai Robo adalah karena ia memiliki dukungan bawaan untuk banyak tugas umum yang membuatnya lebih mudah untuk menulis kode yang dapat dimengerti, bahkan jika Anda kembali ke sana 3 bulan kemudian. Mari kita lihat bagaimana Robo membantu menulis kode yang sangat bersih untuk beberapa tugas yang cukup standar:
# Create a directory, and switch to it: $this->taskExecStack() ->stopOnFail() ->exec('mkdir site') ->exec('cd site') ->run(); # Search and replace inside a text file: $this->taskReplaceInFile('VERSION') ->from('0.2.0') ->to('0.3.0') ->run(); # Run composer update: $this->taskComposerUpdate()->run(); # SSH into a server, go to a specific directory, list the contents of the directory, and set permissions on the logs subdirectory $this->taskSshExec('remote.example.com', 'user') ->remoteDir('/var/www/html') ->exec('ls -la') ->exec('chmod g+x logs') ->run();
Semua hal di atas dimungkinkan menggunakan fungsi PHP dan exec()
normal, tetapi itu cukup sering menjadi latihan yang sia-sia untuk mencoba merekatkan string perintah bersama-sama dan dengan benar keluar dari argumen tanpa mengacaukan segalanya.
Selain contoh di atas, ada juga dukungan serupa untuk Git, Subversion, Rsync, Bower, Gulp, Docker, NPM, dan alat lain yang sering digunakan di lingkungan pengembangan.
Manfaat Robo
Secara keseluruhan, Robo membuat pembuatan skrip baris perintah jauh lebih mudah dan hasil akhirnya biasanya jauh lebih menarik secara semantik daripada PHP biasa.
Saya menemukan bahwa skrip untuk Robo akhirnya lebih mudah dibaca dan dipahami dibandingkan dengan skrip PHP murni, karena begitu banyak hal boilerplate baris perintah tersembunyi di dalam Robo itu sendiri. Secara pribadi, saya dapat melihat kode saya sendiri setelah beberapa bulan dan jujur bertanya-tanya siapa yang menulisnya, jadi apa pun yang membantu saya menulis kode yang jelas dan dapat dibaca adalah tambahan yang disambut baik di sabuk alat saya.
Mempertahankan WordPress Dengan Robo
Sisa artikel ini mengasumsikan bahwa Anda agak akrab dengan WP-CLI, menggunakan Komposer, dan bekerja dengan baris perintah.
File Penting
Ada empat file penting dalam pengaturan ini. Saya akan membahas masing-masing dari mereka di seluruh posting ini:
- wp-cli.yml – File konfigurasi WP-CLI standar. Saya menggunakan ini untuk memanfaatkan beberapa fitur bawaan WP-CLI yang hebat dalam hal mengelola banyak lingkungan.
- RoboFile.php – Ini adalah file dasar untuk mengimplementasikan perintah robo.
- robo.yml – File YAML khusus untuk beberapa parameter konfigurasi tambahan untuk perintah Robo kami.
- composer.json – File konfigurasi Composer standar.
Lingkungan saya
Hanya untuk mengatur panggung untuk sisa artikel ini, saya akan menjelaskan dengan cepat bagaimana lingkungan pengembangan lokal saya diatur. Ini adalah versi sederhana tentang cara saya mengatur berbagai hal di disk:
~/src devenv/ RoboFile.php komposer.json wp-cli.yml robo.yml wordpress-dev/ wordpress-test/ plugin1/ aset/ termasuk/ plugin2 ...
Folder src
adalah tempat semua pengembangan terkait disimpan dan folder devenv
menyimpan file khusus untuk lingkungan runtime yang sebenarnya. Karena saya biasanya menjalankan lebih dari satu lingkungan WordPress secara bersamaan, setiap instalasi WordPress memiliki sub foldernya sendiri, bernama wordpress-dev
dan wordpress-test
dalam contoh ini.
Setiap plugin yang saya kerjakan berada di folder terpisah per plugin.
Di dunia nyata, saya memiliki beberapa folder devenv sehingga saya dapat memisahkan pekerjaan saya untuk Delicious Brains dari berbagai proyek sampingan, tetapi itu tidak relevan untuk artikel ini.
Pengguna Basis Data
Untuk membuat semuanya berfungsi, saya juga telah membuat database lokal untuk setiap instalasi WordPress di instalasi MySQL lokal saya dan ada pengguna database, bernama wordpress
, dengan akses yang benar ke database tersebut. Detail yang tepat dari database serta kredensial pengguna disimpan dalam wp-cli.yml
.
Server Web
Saya menggunakan nginx sebagai server web lokal saya, tetapi Anda akan menemukan bahwa Apache2 juga berfungsi dengan baik. Konfigurasi nginx saya diatur sehingga http://www.wordpress-dev.local
dan http://www.wordpress-test.local
menunjuk ke dua folder WordPress yang disebutkan di atas.
Merawat Ketergantungan
Untuk membuat skrip Robo saya lebih fleksibel, saya menggunakan beberapa fungsi tambahan yang diinstal melalui Komposer, khususnya parser Symfony Yaml. Karena RoboFile.php
benar-benar hanya file PHP biasa, saya bebas memasukkan pustaka apa pun yang saya inginkan dan saya secara alami menggunakan Komposer untuk melakukannya. File composer.json
untuk proyek ini terlihat seperti ini:
{ "require": { "symfony/yaml": "^5.2" } }
Jika Anda menyalinnya, jangan lupa untuk benar-benar menginstal perpustakaan menggunakan composer update
.
Memanfaatkan wp-cli.yml
Saat bekerja dengan WP-CLI, Anda dapat membuat hidup lebih sederhana dengan menggunakan file konfigurasi seperti wp-cli.yml
. Saya menggunakan file konfigurasi WP-CLI karena dua alasan utama: alias dan pengaturan default untuk berbagai sub-perintah.
Apa Itu Alias di WP-CLI?
Pada intinya, alias WP-CLI hanyalah label dalam file konfigurasi yang memungkinkan Anda mengganti beberapa default.
Penggunaan alias yang paling umum mungkin adalah mengganti path
default sehingga setiap alias menunjuk ke instalasi WordPress yang terpisah. Karena setiap instalasi WordPress menyimpan file konfigurasinya sendiri dengan kredensial basis data, alias yang digunakan dengan cara ini juga mewakili basis data terpisah. Alias dalam file konfigurasi WP-CLI dapat menimpa pengaturan url
, path
, user
, ssh
, dan http
, tetapi tidak dapat menimpa nilai default untuk subcommands.
Membuat lingkungan WordPress tambahan bernama @test
memungkinkan saya menjalankan perintah WP-CLI seperti ini:
# Daftar semua plugin di instalasi dev WordPress daftar plugin wp # Daftar semua plugin dalam pengujian instalasi WordPress daftar plugin wp @test
Default Perintah
Jika Anda belum pernah mencoba ini sebelumnya, menyiapkan parameter default untuk subperintah sangat berguna. Misalnya, ketika Anda membuat file konfigurasi WordPress baru menggunakan perintah config create
, Anda perlu menentukan setidaknya tiga parameter setiap kali:

$ wp config buat --dbname=somedb --dbuser=myuser --dbpass=secret
Jika Anda bosan mengetik ini, Anda dapat memasukkan parameter ke dalam wp-cli.yml
:
config create: dbuser: myuser dbpass: secret dbname: somedb
Setelah Anda selesai melakukannya, Anda bisa menggunakan wp config create
dan itu akan mengambil parameter yang tepat dari wp-cli.yml
Anda.
Sayangnya tidak mungkin untuk mengatur default perintah yang berbeda untuk alias yang berbeda. Ini sebenarnya salah satu alasan saya mulai melihat Robo untuk lebih banyak otomatisasi.
File konfigurasi WP-CLI saya terlihat seperti ini:
# Global parameter defaults path: wordpress-dev url: http://www.wordpress-dev.local user: admin @test: path: wordpress-test url: www.wordpress-test.local # Subcommand defaults config create: dbuser: wordpress dbpass: ***** dbname: wordpress extra-php: | define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true); define( 'SCRIPT_DEBUG', true ); core install: admin_user: admin admin_password: admin admin_email: [email protected] title: WordPress Dev core multisite-install: admin_user: admin admin_password: admin admin_email: [email protected]
Dengan hanya file konfigurasi ini, saya dapat menjalankan perintah umum tanpa harus menentukan parameter individual setiap saat:
# Setel ulang basis data pada lingkungan pengujian wp @test db reset --ya # Unduh versi terbaru dan buat file wp-config.php wp @test core unduh wp @test config buat # Instal WordPress wp @test core install --title="Tes WordPress"
Karena WP-CLI mengambil sebagian besar parameter dari file konfigurasi, saya tidak perlu mengetikkan semua parameter baris perintah seperti --dbuser
dan --admin_email
yang biasanya harus saya lakukan.
Perhatikan bahwa pada contoh terakhir di atas saya memberikan parameter title
secara terpisah. Ini karena saya ingin judul situs berbeda di lingkungan pengujian, tetapi tidak mungkin mengganti parameter ini menggunakan alias.
Membuat Perintah Robo Kustom
Menyiapkan instalasi WordPress baru hampir tidak pernah cukup. Biasanya ada satu atau lebih plugin yang perlu diinstal dan diaktifkan dan tidak jarang beberapa pengaturan harus diperbaiki di sana-sini.
Bahkan dengan file konfigurasi WP-CLI yang ditulis dengan hati-hati, saya masih akan berakhir dengan serangkaian perintah yang panjang jika saya ingin mengatur ulang lingkungan WordPress saya dan menyiapkan semuanya. Saya sering melakukan urutan seperti ini berulang-ulang:
# Setel ulang lingkungan dev saya reset wp db --ya rm -rf jalur/ke/wordpress unduhan inti wp konfigurasi wp buat instal inti wp ln -s path/ke/my/plugin1 path/ke/wordpress/wp-content/plugins/ plugin wp aktifkan plugin1
Bahkan ketika mengambil keuntungan penuh dari file konfigurasi WP-CLI, ini banyak mengetik. Untuk menghindari mengetik ini berulang-ulang dan juga terkadang salah, saya membuat dua perintah khusus menggunakan Robo untuk melakukannya untuk saya:
- reset – Menyetel ulang lingkungan WordPress ke status yang diketahui.
- profile – Menjalankan serangkaian perintah pada lingkungan yang ada.
Karena parameter default sub-perintah WP-CLI tidak meluas ke lingkungan baris perintah yang berbeda, kita dapat menggunakan Robo untuk membunuh burung itu dengan batu yang sama. Mari kita lihat bagaimana.
Konfigurasi Perintah
Perhentian pertama kami adalah melihat file konfigurasi Robo yang saya buat untuk ini. Itu ditulis dalam YAML, yang seharusnya membuatnya cukup mudah untuk dipahami dan diperluas. Saya akan membahas setiap bagian saat kita sampai pada perintah yang menggunakannya:
wordpress-dev: cli-prefix: "" path: "wordpress" core-multisite-install: title: WordPress Multisite post-install: - ln -s $cwd/../plugins1 $path/wp-content/plugins/ - ln -s $cwd/../plugins2 $path/wp-content/plugins/ wordpress-test: cli-prefix: "@test" path: "wordpress-test" config-create: dbname: wordpress-test core-install: title: WordPress Test core-multisite-install: title: WordPress Test Multisite post-install: - ln -s $cwd/../plugins1 $path/wp-content/plugins/ profiles: woocommerce: - $wp plugin install --activate woocommerce - $wp wc payment_gateway update cheque --enabled=true --user=admin - $wp option update woocommerce_calc_taxes yes - $wp wc tax create --name=VAT --rate=10 --user=admin - $wp wc shipping_zone_method create 0 --method_id=flat_rate --user=admin - $wp option update --format=json woocommerce_flat_rate_1_settings '{"title":"Flat rate","tax_status":"taxable","cost":"15"}' imageimport: - $wp media import $cwd/../media/lots-of-images/* issue2530: - $wp plugin install --activate some_plugin - $wp config set FOOBAR true --raw
Setiap lingkungan WordPress diidentifikasi menggunakan kunci wordpress-$env
. Setiap kunci dapat menampung beberapa nilai konfigurasi.
Perintah reset
Perintah pertama adalah reset
. Ini digunakan dari baris perintah seperti ini:
# Setel ulang lingkungan dev (default) pengaturan ulang robot # Atau lebih eksplisit robo reset –env=dev # Setel ulang lingkungan pengujian robo reset –env=test # Setel ulang lingkungan pengembang dan instal multisitus WordPress robo reset --multi # Setel ulang lingkungan pengembang ke versi WordPress tertentu robo reset --ver=5.6.1
Hal pertama yang dilakukan perintah ini adalah menghapus semua file dan folder yang ada di direktori instalasi WordPress target dan mengatur ulang database WordPress yang dikonfigurasi.
Kemudian, perintah reset
menggunakan perintah WP-CLI core download
, config create
dan salah satu core install
atau core multisite-install
tergantung pada opsi --multi
.
Sejauh mungkin, ini menggunakan default parameter perintah yang terletak di wp-cli.yml
. Alasan untuk ini adalah bahwa default tersebut juga membantu saat menjalankan WP-CLI secara langsung tanpa pembungkus Robo. Tetapi seperti yang dibahas di atas, dalam beberapa kasus itu tidak mungkin.
Oleh karena itu, file konfigurasi robo.yml
menawarkan kemungkinan untuk menentukan penggantian default di wp-cli.yml.
Misalnya, saat memasang lingkungan @test, kami ingin mengganti parameter untuk parameter core install
--title
. Kita dapat melakukannya dengan menambahkan yang berikut di robo.yml
:
wordpress-test: ... ... core-install: title: WordPress Test ... ...
Sintaksnya di sini cukup mudah: nama perintah CLI (spasi diganti dengan tanda hubung) sebagai kunci dan satu subkunci untuk setiap parameter bernama. Contoh di atas akan menghasilkan parameter tambahan berikut ke perintah cli core install
:
wp @test core install --title="Tes WordPress"
Langkah-Langkah Pasca-Instal
Setiap kunci lingkungan dalam file konfigurasi secara opsional dapat menentukan array dengan langkah-langkah pasca-instal. Ini hanyalah daftar perintah bash yang dijalankan ketika instalasi WordPress selesai. Untuk menambah fleksibilitas, beberapa penggantian string dilakukan sebelum perintah dijalankan:
Rangkaian | Digantikan dengan |
---|---|
$cwd | Direktori kerja saat ini |
$jalan | Jalur instalasi WordPress target |
$wp | Perintah wp-cli, termasuk awalan alias, yaitu wp @test |
~ | (simbol tilde) Direktori HOME dari pengguna saat ini |
Jadi langkah pasca-instal ln -s $cwd/../plugin1 $path/wp-content/plugins/
akan membuat symlink dari salah satu folder plugin saya ke subfolder plugin di instalasi WordPress target.
Komando profile
Perintah profile
sangat mirip dengan langkah-langkah pasca-instal, tetapi tujuan penggunaannya adalah untuk menjalankan serangkaian perintah pada instalasi WordPress yang ada. Katakanlah Anda memiliki lingkungan pengembangan yang sangat sederhana di mana Anda melakukan sebagian besar pekerjaan Anda. Namun, terkadang Anda perlu menginstal plugin WooCommerce dan melakukan beberapa pengaturan dasar untuk itu. Inilah gunanya perintah profile
. Ini dapat digunakan seperti ini:
# Setel ulang lingkungan pengembang pengaturan ulang robot # Instal WooCommerce dan buat beberapa perubahan pengaturan profil robo woocommerce
Contoh file robo.yml
di atas memiliki profil WooCommerce. Menerapkan profil itu akan:
- Instal dan aktifkan WooCommerce menggunakan WP-CLI.
- Gunakan perintah sub
wc
untuk mengatur gateway pembayaran, zona pajak, dan pengaturan pengiriman. - Gunakan sub perintah
option
untuk mengubah beberapa pengaturan secara langsung di tabel opsi WordPress.
Menggunakan profil yang berbeda cukup berguna. Saya menghabiskan sebagian besar hari saya mengerjakan plugin WP Offload Media dan saya sering perlu mengimpor banyak gambar ke perpustakaan media WordPress. WP-CLI memiliki perintah yang sangat nyaman untuk ini:
wp import media /some/long/path/I/sering/lupa/*
Karena saya sering melupakan banyak hal secara umum dan nama jalur yang panjang pada khususnya, saya merasa lebih mudah untuk mengingat:
impor gambar profil robo
Berikut contoh lain. Saya telah mengerjakan masalah GitHub tertentu di mana kami mencoba memperbaiki masalah kompatibilitas antara plugin kami dan plugin WordPress populer lainnya. Ketika saya mengerjakan masalah itu, saya perlu menginstal plugin itu dan menetapkan nilai konfigurasi di wp-config.php.
Jadi saya membuat profil untuk itu:
.... issue2530: - $wp plugin install --activate some_plugin - $wp config set FOOBAR value
Sekarang saya bisa menyiapkan lingkungan saya dalam satu langkah, cukup robo profile issue2530
.
Sama seperti langkah-langkah post-install
dalam perintah reset, setiap baris dalam definisi profil sebenarnya hanyalah perintah bash yang terpisah. Anda dapat menggunakannya untuk meluncurkan skrip terpisah, menghapus file, atau apa pun yang Anda suka. Ini juga sangat mungkin untuk menembak diri sendiri di kaki, jadi melangkahlah dengan hati-hati.
Sumber
Jika salah satu di atas terdengar menarik untuk dicoba, inilah RoboFile yang saya gunakan untuk semua hal di atas, jangan ragu untuk menggunakannya untuk memulai mengelola WordPress menggunakan Robo.
<?php use Robo\Symfony\ConsoleIO; use Robo\Tasks; use Symfony\Component\Yaml\Yaml; require_once 'vendor/autoload.php'; /** * Class RoboFile */ class RoboFile extends Tasks { /** * Reset the WordPress environment to a known state. Reads environments * and configuration from robo.yml * * @option env Environment (dev, test etc) * @option multi Make a multi site install * @option ver WordPress version * * @return bool */ public function reset( $opts = [ 'env' => 'dev', 'multi' => false, 'ver' => 'latest' ] ) { $env = $opts['env']; $version = $opts['ver']; $multi = $opts['multi']; $all_config = $this->read_yaml(); $key = "wordpress-$env"; if ( ! $this->ensure_basic_config( $all_config, $env ) ) { return false; } if ( ! isset( $all_config[ $key ]['path'] ) ) { $this->say( "No path set for environment $env." ); } $config = $all_config[ $key ]; $prefix = $config['cli-prefix']; $wp = trim( "wp $prefix" ); $path = $config['path']; $path = substr( $path, 0, 1 ) !== '/' ? __DIR__ . '/' . $path : $path; $version = $version === 'latest' ? '' : "--version=$version"; $config_create = $this->additional_parameters( 'config create', $config ); $install_cmd = $multi ? 'core multisite-install' : 'core install'; $install_params = $this->additional_parameters( $install_cmd, $config ); echo "$wp $install_cmd $install_params\n"; $this->taskExec( "$wp db reset --yes" )->run(); $this->taskExecStack() ->exec( "rm -rf $path/*" ) ->exec( "$wp core download $version" ) ->exec( "$wp config create $config_create" ) ->exec( "$wp config delete WP_DEBUG" ) ->exec( "$wp $install_cmd $install_params" ) ->run(); foreach ( $config['post-install'] as $cmd ) { $cmd = str_replace( '$wp', $wp, $cmd ); $cmd = str_replace( '$path', $path, $cmd ); $cmd = str_replace( '$cwd', __DIR__, $cmd ); $cmd = str_replace( '~', getenv( "HOME" ), $cmd ); echo $cmd . "\n"; $this->taskExec( $cmd )->run(); } } /** * Run a set of wp-cli commands on an existing WordPress environment * * @param string $profileName Name of the profile in robo.yml * * @option env Environment (dev, test etc) */ public function profile( $profileName, $opts = ['env' => 'dev']) { $env = $opts['env']; $all_config = $this->read_yaml(); $key = "wordpress-$env"; if ( ! $this->ensure_basic_config( $all_config, $env ) ) { return false; } $config = $all_config[ $key ]; $prefix = $config['cli-prefix']; $wp = trim( "wp $prefix" ); $path = $config['path']; $path = substr( $path, 0, 1 ) !== '/' ? __DIR__ . '/' . $path : $path; if ( ! isset( $all_config['profiles'][ $profileName ] ) ) { $this->say( "Profile $profileName not found" ); return false; } $profile = $all_config['profiles'][ $profileName ]; foreach ( $profile as $cmd ) { $cmd = str_replace( '$wp', $wp, $cmd ); $cmd = str_replace( '$path', $path, $cmd ); $cmd = str_replace( '$cwd', __DIR__, $cmd ); $cmd = str_replace( '~', getenv( "HOME" ), $cmd ); // Quick and dirty. If the cmd exactly matches another profile, run it! if ( isset( $all_config['profiles'][ $cmd ] ) ) { $this->profile( $cmd, $env ); continue; } echo $cmd . "\n"; $this->taskExec( $cmd )->run(); } } /** * @return array */ private function read_yaml() { return Yaml::parseFile( __DIR__ . '/robo.yml' ); } /** * @param $config * @param $env * * @return bool */ private function ensure_basic_config( $config, $env ) { $key = "wordpress-$env"; if ( ! isset( $config[ $key ] ) ) { $this->say( "No path set for environment $env." ); return false; } if ( ! isset( $config[ $key ]['cli-prefix'] ) ) { $this->say( "No wp-cli prefix set for environment $env." ); return false; } return true; } /** * @param string $name * @param array<string, string> $config * * @return string */ private function additional_parameters( $name, $config ) { $name = str_replace( ' ', '-', $name ); if ( ! isset( $config[ $name ] ) ) { return ''; } return implode( ' ', array_map( function ( $v, $k ) { return sprintf( "--%s='%s'", $k, $v ); }, $config[ $name ], array_keys( $config[ $name ] ) ) ); } }
Membungkus
Dalam pengembangan, tugas yang berulang cenderung sesuai dengan wilayah. Saya tidak dapat melihat cara untuk menghilangkannya sepenuhnya, tetapi mengotomatiskan sebanyak mungkin dari mereka benar-benar membantu Anda menyelesaikan sebanyak mungkin pekerjaan nyata dengan waktu yang tersedia.
Mengotomatiskan beberapa tugas tersebut dengan kombinasi WP-CLI dan Robo yang telah saya uraikan di sini telah menghemat waktu saya setiap hari sebagai pengembang plugin. Saya tidak akan pernah bisa kembali melakukan hal-hal ini secara manual lagi.
Alat apa yang Anda gunakan untuk mengotomatiskan bagian paling membosankan dari alur kerja pengembangan Anda? Beri tahu saya di komentar.