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

  1. Apa itu Robo?
    1. Robo Menyederhanakan Baris Perintah PHP
    2. Memasang Robo
    3. Perintah Pertama Anda
    4. Masukan dan keluaran
    5. Pembantu Hebat
    6. Manfaat Robo
  2. Mempertahankan WordPress Dengan Robo
    1. File Penting
    2. Lingkungan saya
    3. Pengguna Basis Data
    4. Server Web
    5. Merawat Ketergantungan
  3. Memanfaatkan wp-cli.yml
    1. Apa Itu Alias ​​​​di WP-CLI?
    2. Default Perintah
  4. Membuat Perintah Robo Kustom
    1. Konfigurasi Perintah
    2. Perintah reset
    3. Langkah-Langkah Pasca-Instal
    4. Komando profile
  5. 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:

  1. 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.
  2. RoboFile.php – Ini adalah file dasar untuk mengimplementasikan perintah robo.
  3. robo.yml – File YAML khusus untuk beberapa parameter konfigurasi tambahan untuk perintah Robo kami.
  4. 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.