WP-CLI (WordPress Command Line Interface) یک ابزار خط فرمان رسمی برای مدیریت وردپرس (WordPress) است که به توسعه‌دهندگان، مدیران سرور و تیم‌های DevOps امکان می‌دهد بدون ورود به پیشخوان، عملیات گسترده‌ای مانند نصب، به‌روزرسانی، پشتیبان‌گیری، مدیریت افزونه‌ها و پاک‌سازی دیتابیس را با چند دستور ساده اجرا کنند. این ابزار به‌ویژه در محیط‌های تولیدی، استقرار خودکار و اسکریپت‌نویسی بسیار کارآمد است. WP-CLI با PHP نوشته شده و روی هر سروری که PHP و وردپرس نصب باشد، قابل اجراست. ترکیب آن با Shell، Cron و CI/CD، مدیریت وردپرس را از حالت دستی به حالت خودکار و قابل بازتولید منتقل می‌کند. در این نوشتار، مبانی، دستورات کلیدی، الگوهای پیشرفته و نکات عملی WP-CLI بررسی می‌شود.

در پروژه‌های وردپرسی که با ترافیک بالا و چند محیط (توسعه، استیجینگ، تولید) کار می‌کنند، یکی از تفاوت‌های اصلی بین یک جریان کاری حرفه‌ای و آماتور، استفاده از خط فرمان است. WP-CLI همان ابزاری است که این تفاوت را می‌سازد. تجربه نشان داده که تیم‌هایی که WP-CLI را در جریان کاری خود ادغام می‌کنند، زمان استقرار را چند برابر کاهش می‌دهند و خطاهای انسانی را به حداقل می‌رسانند.

WP-CLI چیست و چه مسئله‌ای را حل می‌کند؟

WP-CLI یک مجموعه از ابزارهای خط فرمان برای مدیریت وردپرس است. این ابزار از سال ۲۰۱۰ میلادی توسعه یافته و امروز به یک استاندارد واقعی در اکوسیستم وردپرس تبدیل شده است. WP-CLI به‌صورت رسمی توسط تیم وردپرس پشتیبانی می‌شود و در پروژه‌هایی مانند WP-CLI، Bedrock و بسیاری از ابزارهای مدیریتی دیگر استفاده می‌شود.

مسئله‌ای که WP-CLI حل می‌کند، ساده اما حیاتی است: مدیریت وردپرس از طریق پیشخوان، برای عملیات تکراری یا حجیم، کند و پرخطاست. تصور کنید باید ۵۰۰ افزونه را در ۲۰ سایت به‌روزرسانی کنید، یا دیتابیسی با ۲ گیگابایت حجم را جستجو و جایگزین کنید، یا ۱۰۰۰ کاربر را به‌صورت دسته‌ای ایجاد کنید. انجام این کارها از طریق پیشخوان عملاً غیرممکن یا بسیار زمان‌بر است. WP-CLI این عملیات را به چند دستور ساده تبدیل می‌کند.

WP-CLI با PHP نوشته شده و به‌عنوان یک فایل PHAR (PHP Archive) توزیع می‌شود. این یعنی برای اجرا، فقط به PHP و وردپرس نیاز دارد. WP-CLI مستقیماً با فایل‌های وردپرس تعامل می‌کند و از همان APIها و توابعی استفاده می‌کند که پیشخوان استفاده می‌کند. بنابراین، هر عملیاتی که در پیشخوان امکان‌پذیر است، در WP-CLI نیز قابل انجام است، و بالعکس.

WP-CLI یک رابط خط فرمان برای همان وردپرسی است که می‌شناسید. این ابزار جادو نمی‌کند؛ همان عملیات را سریع‌تر، قابل اسکریپت‌نویسی و قابل بازتولید انجام می‌دهد.

تفاوت WP-CLI با ابزارهای مشابه

ابزارهای متعددی برای مدیریت وردپرس وجود دارند، اما WP-CLI جایگاه منحصربه‌فردی دارد. جدول زیر تفاوت آن با سایر روش‌ها را نشان می‌دهد:

روشمناسب برایمحدودیت اصلی
پیشخوان وردپرسکاربران عادی، عملیات یک‌بارهکند، غیرقابل اسکریپت‌نویسی، پرخطا در حجم بالا
WP-CLIتوسعه‌دهندگان، DevOps، اتوماسیوننیازمند دسترسی خط فرمان و دانش PHP
REST APIیکپارچگی با سیستم‌های خارجینیازمند احراز هویت، محدود به endpoints موجود
افزونه‌های مدیریت از راه دورمدیریت چند سایتوابسته به افزونه، امنیت متغیر

همان‌طور که مشخص است، WP-CLI برای عملیات تکراری، حجیم یا خودکار بهترین انتخاب است. برای مطالعه بیشتر درباره ابزارهای ضروری توسعه وردپرس، مقاله بهترین ابزارهای توسعه وب را ببینید.

چرا WP-CLI جایگزین پیشخوان نمی‌شود بلکه مکمل آن است؟

یکی از باورهای رایج این است که WP-CLI جایگزین پیشخوان وردپرس است. این باور نادرست است. WP-CLI و پیشخوان دو ابزار مکمل هستند که هر کدام برای سناریوهای خاصی طراحی شده‌اند.

پیشخوان برای چه کارهایی مناسب است؟

  • مدیریت روزمره محتوا توسط نویسندگان و ویرایشگران
  • تنظیمات بصری مانند سفارشی‌سازی قالب
  • نصب یک افزونه به‌صورت موردی
  • مشاهده گزارش‌ها و آمار به‌صورت بصری

WP-CLI برای چه کارهایی مناسب است؟

  • عملیات حجیم روی چند سایت یا چند کاربر
  • به‌روزرسانی خودکار هسته، افزونه‌ها و قالب‌ها
  • پشتیبان‌گیری خودکار
  • مهاجرت بین سرورها
  • پاک‌سازی دیتابیس
  • اجرای تست‌ها در CI/CD
  • ساخت و مدیریت محیط‌های استیجینگ

در پروژه‌های حرفه‌ای، هر دو ابزار در کنار یکدیگر استفاده می‌شوند. برای مطالعه بیشتر درباره ساختار پروژه‌های وردپرس، مقاله چگونه یک پروژه توسعه وردپرس را ساختاربندی کنیم را ببینید.

پیشخوان برای انسان است و WP-CLI برای اسکریپت. یک تیم حرفه‌ای هر دو را می‌شناسد و در جای مناسب از هر کدام استفاده می‌کند.

نصب و راه‌اندازی WP-CLI

نصب WP-CLI ساده است، اما چند روش مختلف وجود دارد که بسته به سیستم‌عامل و سطح دسترسی متفاوت است. در ادامه، روش‌های اصلی بررسی می‌شود.

نصب روی لینوکس و مک

روش توصیه‌شده نصب WP-CLI، دانلود فایل PHAR از مخزن رسمی است:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

پس از این دستورات، فایل wp-cli.phar در مسیر /usr/local/bin/wp قرار می‌گیرد و دستور wp در هر نقطه از ترمینال قابل اجراست. برای تأیید نصب:

wp --info

این دستور اطلاعاتی مانند نسخه PHP، نسخه WP-CLI و مسیر وردپرس را نمایش می‌دهد. اگر خروجی شامل WP-CLI version بود، نصب موفق بوده است.

روش جایگزین، استفاده از مدیر پکیج سیستم‌عامل است. برای مثال، در اوبونتو:

sudo apt install wp-cli

این روش ممکن است نسخه قدیمی‌تری نصب کند، بنابراین روش دانلود مستقیم توصیه می‌شود.

نصب روی ویندوز

روی ویندوز، می‌توان WP-CLI را از طریق Chocolatey نصب کرد:

choco install wp-cli

یا به‌صورت دستی، فایل PHAR را دانلود و در مسیری مانند C:\wp-cli\ قرار داد. سپس این مسیر باید به PATH اضافه شود. در PowerShell:

$env:Path += ";C:\wp-cli"
wp --info

برای پروژه‌های وردپرسی روی ویندوز، استفاده از WSL (Windows Subsystem for Linux) توصیه می‌شود. WSL یک محیط لینوکسی کامل فراهم می‌کند و WP-CLI در آن بهتر کار می‌کند.

تأیید نصب و رفع خطاهای رایج

پس از نصب، ممکن است خطاهایی رخ دهد. برخی از رایج‌ترین آن‌ها:

  • خطای PHP version: WP-CLI به PHP 7.2.24 یا بالاتر نیاز دارد. نسخه PHP را با php -v بررسی کنید.
  • خطای permission denied: فایل PHAR باید قابل اجرا باشد. دستور chmod +x wp-cli.phar را اجرا کنید.
  • خطای memory limit: WP-CLI ممکن است به حافظه بیشتری نیاز داشته باشد. با php -d memory_limit=512M wp ... می‌توان محدودیت را افزایش داد.
  • خطای MySQL: اگر WP-CLI نتواند به دیتابیس متصل شود، فایل wp-config.php را بررسی کنید.

برای مطالعه بیشتر درباره خطاهای وردپرس، مقاله خطاهای رایج وردپرس و رفع مرحله‌به‌مرحله آنها را ببینید.

دستورات پایه و ساختار کلی

ساختار دستورات WP-CLI بسیار منظم است. هر دستور از سه بخش تشکیل می‌شود:

wp   [options] [arguments]

برای مثال:

wp plugin install woocommerce --activate

در این دستور:

  • wp: نام برنامه
  • plugin: دستور اصلی
  • install: زیرفرمان
  • woocommerce: آرگومان
  • --activate: گزینه

این ساختار منظم باعث می‌شود که یادگیری WP-CLI ساده باشد. با یادگیری چند دستور اصلی، می‌توان به‌سرعت دستورات دیگر را حدس زد.

دستورات هسته (Core)

دستورات wp core برای مدیریت هسته وردپرس استفاده می‌شوند:

wp core version
wp core check-update
wp core update
wp core update-db
wp core verify-checksums
  • wp core version: نمایش نسخه فعلی وردپرس
  • wp core check-update: بررسی وجود به‌روزرسانی
  • wp core update: به‌روزرسانی هسته
  • wp core update-db: اجرای به‌روزرسانی دیتابیس
  • wp core verify-checksums: بررسی یکپارچگی فایل‌های هسته

دستور wp core verify-checksums به‌ویژه برای بررسی امنیتی مفید است. این دستور فایل‌های هسته را با چک‌سام‌های رسمی مقایسه می‌کند و هر تغییر غیرمجاز را گزارش می‌دهد. برای مطالعه بیشتر درباره امنیت وردپرس، مقاله چگونه امنیت وردپرس را تقویت کنیم؟ را ببینید.

مدیریت افزونه‌ها

دستورات wp plugin کامل‌ترین مجموعه مدیریت افزونه را فراهم می‌کنند:

wp plugin list
wp plugin list --status=active
wp plugin list --status=inactive
wp plugin install woocommerce --activate
wp plugin update --all
wp plugin deactivate akismet
wp plugin delete hello
wp plugin verify-checksums --all
  • wp plugin list: لیست همه افزونه‌ها با وضعیت
  • wp plugin install: نصب افزونه از مخزن رسمی
  • wp plugin update --all: به‌روزرسانی همه افزونه‌ها
  • wp plugin verify-checksums: بررسی یکپارچگی فایل‌های افزونه

گزینه --all در دستور wp plugin update به‌ویژه در محیط استیجینگ مفید است، اما در تولید باید با احتیاط استفاده شود. توصیه می‌شود ابتدا در استیجینگ تست و سپس در تولید اعمال شود.

برای مطالعه بیشتر درباره توسعه افزونه، مقاله راهنمای توسعه افزونه وردپرس از صفر را ببینید.

مدیریت قالب‌ها

دستورات wp theme مشابه دستورات افزونه عمل می‌کنند:

wp theme list
wp theme install astra --activate
wp theme update --all
wp theme activate twentytwentyfour
wp theme delete twentytwentythree

نکته مهم در مورد قالب‌ها این است که در هر لحظه فقط یک قالب می‌تواند فعال باشد. اما چند قالب می‌توانند نصب بمانند. WP-CLI این تفاوت را به‌خوبی مدیریت می‌کند.

برای مطالعه بیشتر درباره توسعه قالب، مقاله راهنمای توسعه قالب وردپرس از صفر را ببینید.

مدیریت نوشته‌ها و برگه‌ها

دستورات wp post برای مدیریت نوشته‌ها، برگه‌ها و انواع سفارشی استفاده می‌شوند:

wp post list
wp post list --post_type=page
wp post create --post_title="عنوان جدید" --post_status=publish
wp post update 123 --post_title="عنوان تغییر یافته"
wp post delete 123 --force
wp post delete $(wp post list --post_type=revision --format=ids) --force

آخرین دستور، حذف همه ریویژن‌هاست. این کار می‌تواند حجم دیتابیس را به‌طور محسوس کاهش دهد. برای مطالعه بیشتر درباره تأثیر ریویژن‌ها بر دیتابیس، مقاله رول‌بک و ریویژن‌ها چگونه دیتابیس را سنگین می‌کنند؟ را ببینید.

مدیریت کاربران

دستورات wp user برای مدیریت کاربران:

wp user list
wp user list --role=administrator
wp user create newuser newuser@example.com --role=editor --user_pass=SecurePass123
wp user update 5 --display_name="نام جدید"
wp user delete 5 --reassign=1
wp user reset-password admin

دستور wp user create برای ایجاد کاربران به‌صورت دسته‌ای مفید است. دستور wp user reset-password برای بازنشانی رمز عبور از خط فرمان کاربرد دارد و در مواقع اضطراری بسیار مفید است.

مدیریت گزینه‌ها

دستورات wp option برای مدیریت گزینه‌های وردپرس:

wp option get siteurl
wp option update blogname "نام جدید"
wp option list --autoload=on --format=table
wp option delete my_old_option
wp option pluck my_option_name key_name

دستور wp option list --autoload=on به‌ویژه مفید است. این دستور همه گزینه‌های autoloaded را نمایش می‌دهد و می‌تواند به شناسایی گزینه‌های سنگین کمک کند. برای مطالعه بیشتر درباره autoload، مقاله Autoload و تأثیر آن بر سرعت وردپرس را ببینید.

مدیریت دیتابیس با WP-CLI

WP-CLI دستورات قدرتمندی برای مدیریت دیتابیس فراهم می‌کند. این دستورات به‌ویژه در پشتیبان‌گیری، مهاجرت و بهینه‌سازی کاربرد دارند.

خروجی و ورود دیتابیس

wp db export backup-$(date +%Y%m%d).sql
wp db import backup-20250101.sql
wp db export - | gzip > backup.sql.gz
gunzip < backup.sql.gz | wp db import -
  • wp db export: خروجی دیتابیس به فایل SQL
  • wp db import: ورود فایل SQL به دیتابیس
  • ترکیب با gzip: فشرده‌سازی خودکار

دستور wp db export معادل mysqldump است اما با تنظیمات وردپرس هماهنگ است و نیازی به وارد کردن نام دیتابیس و رمز عبور ندارد. برای مطالعه بیشتر درباره استراتژی‌های پشتیبان‌گیری، مقاله پشتیبان‌گیری از MySQL را ببینید.

بهینه‌سازی و پاک‌سازی

wp db optimize
wp db check
wp db repair
wp transient delete --expired
wp transient delete --all
  • wp db optimize: بهینه‌سازی جداول MySQL
  • wp db check: بررسی یکپارچگی جداول
  • wp db repair: تعمیر جداول آسیب‌دیده
  • wp transient delete --expired: حذف ترنزینت‌های منقضی

دستور wp db optimize معادل OPTIMIZE TABLE در MySQL است و می‌تواند فضای دیسک را آزاد کند و سرعت کوئری‌ها را افزایش دهد. برای مطالعه بیشتر درباره بهینه‌سازی دیتابیس، مقاله Database Optimization و بهینه‌سازی دیتابیس وردپرس را ببینید.

جستجو و جایگزینی امن

یکی از پرکاربردترین دستورات WP-CLI، wp search-replace است که برای مهاجرت و تغییر دامنه استفاده می‌شود:

wp search-replace 'old-domain.com' 'new-domain.com'
wp search-replace 'old-domain.com' 'new-domain.com' --dry-run
wp search-replace 'http://' 'https://' --skip-columns=guid
wp search-replace 'old-domain.com' 'new-domain.com' --all-tables

نکات مهم در استفاده از این دستور:

  • همیشه ابتدا با --dry-run تست کنید تا تغییرات واقعی اعمال نشوند.
  • گزینه --skip-columns=guid برای جلوگیری از تغییر GUID در جداول خاص مفید است.
  • گزینه --all-tables برای جستجو در همه جداول، نه فقط جداول وردپرس.
  • این دستور داده‌های سریالی‌شده را نیز به‌درستی مدیریت می‌کند.

برای مطالعه بیشتر درباره مهاجرت، مقاله چگونه سایت وردپرسی را به هاست جدید منتقل کنیم؟ را ببینید.

دستور search-replace یکی از قدرتمندترین ابزارهای WP-CLI است. اگر آن را نادرست اجرا کنید، می‌تواند سایت را نابود کند. همیشه با --dry-run شروع کنید و از دیتابیس نسخه پشتیبان بگیرید.

دستورات پیشرفته و سناریوهای واقعی

در پروژه‌های حرفه‌ای، WP-CLI فراتر از دستورات پایه استفاده می‌شود. در این بخش، سناریوهای واقعی و دستورات پیشرفته بررسی می‌شود.

مهاجرت بین سرورها

مهاجرت یک سایت وردپرسی با WP-CLI به‌صورت کامل و امن امکان‌پذیر است:

# روی سرور مبدأ
wp db export migration.sql
wp search-replace 'old-domain.com' 'new-domain.com' --dry-run
wp search-replace 'old-domain.com' 'new-domain.com'

# روی سرور مقصد
wp db import migration.sql
wp cache flush
wp rewrite flush

ترتیب دستورات مهم است: ابتدا دیتابیس خروجی گرفته می‌شود، سپس دامنه جایگزین می‌شود و در نهایت دیتابیس در سرور مقصد وارد می‌شود. برای مطالعه بیشتر، مقاله آموزش گام‌به‌گام مهاجرت سایت وردپرسی را ببینید.

مدیریت Cron و زمان‌بندی

wp cron event list
wp cron event run --due-now
wp cron event delete my_custom_event
wp cron test
  • wp cron event list: لیست همه رویدادهای Cron
  • wp cron event run --due-now: اجرای رویدادهای موعد رسیده
  • wp cron test: تست عملکرد Cron وردپرس

در سایت‌هایی که ترافیک کمی دارند، Cron وردپرس ممکن است به‌موقع اجرا نشود. راه‌حل این است که DISABLE_WP_CRON را در wp-config.php فعال کنید و Cron واقعی سیستم‌عامل را به WP-CLI متصل کنید:

*/5 * * * * cd /var/www/html && wp cron event run --due-now > /dev/null 2>&1

این رویکرد، اطمینان می‌دهد که رویدادهای زمان‌بندی‌شده همیشه در زمان مناسب اجرا شوند. برای مطالعه بیشتر درباره کرون وردپرس، مقاله چرا کرون وردپرس کار نمی‌کند؟ را ببینید.

مدیریت کش

wp cache flush
wp cache type list
wp rewrite flush
wp transient delete --expired

دستور wp cache flush برای پاک‌سازی object cache مفید است. در سایت‌هایی که از Redis یا Memcached استفاده می‌کنند، این دستور می‌تواند به‌سرعت کش را بازنشانی کند. دستور wp rewrite flush برای بازسازی قوانین rewrite در .htaccess استفاده می‌شود.

مدیریت Multisite

WP-CLI از Multisite (چند سایتی) به‌خوبی پشتیبانی می‌کند:

wp site list
wp site create --slug=newsite --title="New Site" --email=admin@example.com
wp site delete 5
wp site archive 5
wp site unarchive 5
  • wp site list: لیست همه سایت‌های شبکه
  • wp site create: ایجاد سایت جدید در شبکه
  • wp site archive: آرشیو کردن سایت

در Multisite، گزینه --url برای اجرای دستورات روی یک سایت خاص ضروری است:

wp plugin list --url=subsite.example.com
wp option get blogname --url=subsite.example.com

بدون گزینه --url، دستورات روی سایت اصلی شبکه اجرا می‌شوند. این نکته در شبکه‌های بزرگ حیاتی است و نادیده گرفتن آن می‌تواند به تغییرات ناخواسته منجر شود.

اتوماسیون با Shell و Cron

WP-CLI به‌طور طبیعی با Shell و Cron ترکیب می‌شود. چند نمونه از اسکریپت‌های عملی:

پشتیبان‌گیری خودکار روزانه

#!/bin/bash
# /usr/local/bin/wp-backup.sh
SITE_PATH="/var/www/html"
BACKUP_DIR="/backups/wordpress"
DATE=$(date +%Y%m%d_%H%M%S)

cd $SITE_PATH
wp db export $BACKUP_DIR/db_$DATE.sql --add-drop-table
tar -czf $BACKUP_DIR/files_$DATE.tar.gz wp-content/

# حذف پشتیبان‌های قدیمی‌تر از 30 روز
find $BACKUP_DIR -type f -mtime +30 -delete

برای اجرای خودکار روزانه در ساعت 3 بامداد:

0 3 * * * /usr/local/bin/wp-backup.sh >> /var/log/wp-backup.log 2>&1

برای مطالعه بیشتر درباره پشتیبان‌گیری، مقاله چرا بکاپ وردپرس بدون استراتژی بی‌فایده است؟ را ببینید.

به‌روزرسانی خودکار با شرط

#!/bin/bash
cd /var/www/html

# بررسی وجود به‌روزرسانی
if wp core check-update --format=count | grep -q '[1-9]'; then
    wp core update
    wp core update-db
    wp cache flush
    echo "WordPress updated successfully"
fi

# به‌روزرسانی افزونه‌ها
wp plugin update --all --minor
wp theme update --all --minor

گزینه --minor تضمین می‌کند که فقط به‌روزرسانی‌های minor اعمال شوند، نه major. این رویکرد، خطر شکستن سایت را کاهش می‌دهد.

پاک‌سازی دوره‌ای

#!/bin/bash
cd /var/www/html

# حذف ترنزینت‌های منقضی
wp transient delete --expired

# حذف ریویژن‌ها (نگه داشتن 5 نسخه آخر)
wp post list --post_type=revision --format=ids | xargs -r wp post delete --force

# بهینه‌سازی دیتابیس
wp db optimize

# پاک‌سازی کش
wp cache flush

برای مطالعه بیشتر درباره پاک‌سازی دیتابیس، مقاله چگونه دیتابیس وردپرس را پاک‌سازی کنیم؟ را ببینید.

WP-CLI در CI/CD

WP-CLI یکی از اجزای اصلی خط لوله CI/CD در پروژه‌های وردپرسی است. نمونه‌ای از GitHub Actions:

name: WordPress Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'

      - name: Install WP-CLI
        run: |
          curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
          chmod +x wp-cli.phar
          sudo mv wp-cli.phar /usr/local/bin/wp

      - name: Run Tests
        run: |
          wp core version
          wp plugin list

      - name: Deploy
        run: |
          rsync -avz --delete ./ user@server:/var/www/html/
          ssh user@server "cd /var/www/html && wp cache flush && wp rewrite flush"

این خط لوله، پس از هر push، سایت را به‌روزرسانی می‌کند و کش را پاک می‌کند. برای مطالعه بیشتر درباره CI/CD، مقاله CI/CD برای پروژه‌های وردپرسی را ببینید.

نکات امنیتی در استفاده از WP-CLI

WP-CLI ابزاری قدرتمند است و مانند هر ابزار قدرتمندی، نیازمند رعایت نکات امنیتی است:

  • محدود کردن دسترسی: دستور wp باید فقط برای کاربران مجاز در دسترس باشد. دسترسی sudo نباید به‌راحتی داده شود.
  • اجرا با کاربر صحیح: WP-CLI باید با همان کاربری اجرا شود که فایل‌های وردپرس را مالک است. اجرا با root می‌تواند به مشکلات دسترسی منجر شود.
  • محافظت از wp-config.php: این فایل شامل اطلاعات حساس دیتابیس است. دسترسی به آن باید محدود باشد.
  • پرهیز از ذخیره رمز عبور در اسکریپت: برای احراز هویت، از متغیرهای محیطی یا فایل‌های محافظت‌شده استفاده کنید.
  • بررسی لاگ‌ها: دستورات WP-CLI در لاگ سیستم ثبت می‌شوند. این لاگ‌ها باید دوره‌ای بررسی شوند.
  • استفاده از --skip-plugins در موارد حساس: در برخی دستورات، می‌توان افزونه‌ها را نادیده گرفت تا از تداخل جلوگیری شود.

برای مطالعه بیشتر درباره امنیت، مقاله چگونه امنیت WordPress را اصولی پیکربندی کنیم؟ را ببینید.

WP-CLI بدون محافظت، مانند یک کلید یدکی است که در جیب همه گذاشته شده. قدرت آن زمانی مفید است که دسترسی به آن کنترل‌شده باشد.

ساخت دستور سفارشی WP-CLI

یکی از قابلیت‌های پیشرفته WP-CLI، امکان ساخت دستور سفارشی است. این قابلیت برای تیم‌هایی که عملیات تکراری دارند، بسیار مفید است.

یک دستور سفارشی با ایجاد یک کلاس PHP و ثبت آن با WP_CLI::add_command() ساخته می‌شود:

<?php
/**
 * Plugin Name: My Custom WP-CLI Commands
 */

if (defined('WP_CLI') && WP_CLI) {
    class My_Commands {
        /**
         * پاک‌سازی کامل سایت
         *
         * ## EXAMPLES
         *
         *     wp my cleanup
         */
        public function cleanup($args, $assoc_args) {
            WP_CLI::log('Starting cleanup...');
            
            // حذف ترنزینت‌ها
            WP_CLI::runcommand('transient delete --expired');
            
            // حذف ریویژن‌ها
            $revisions = WP_CLI::runcommand('post list --post_type=revision --format=ids', [
                'return' => true
            ]);
            
            if (!empty($revisions)) {
                WP_CLI::runcommand("post delete $revisions --force");
            }
            
            WP_CLI::success('Cleanup completed.');
        }
    }
    
    WP_CLI::add_command('my cleanup', 'My_Commands');
}

پس از فعال‌سازی این افزونه، دستور wp my cleanup در دسترس خواهد بود. برای مطالعه بیشتر درباره ساختار افزونه، مقاله ساختار استاندارد افزونه وردپرس را ببینید.

اشتباهات رایج در استفاده از WP-CLI

WP-CLI ابزاری قدرتمند است و استفاده نادرست از آن می‌تواند به مشکلات جدی منجر شود. برخی از رایج‌ترین اشتباهات:

  1. اجرای دستورات بدون پشتیبان‌گیری: به‌ویژه در دستور search-replace و db import.
  2. استفاده از --force در حذف: دستور wp post delete بدون --force به سطل زباله منتقل می‌کند، اما با --force برای همیشه حذف می‌کند.
  3. نادیده گرفتن --dry-run: در دستورات حساس، همیشه ابتدا با --dry-run تست کنید.
  4. اجرای دستورات با کاربر root: این کار می‌تواند به مشکلات دسترسی فایل منجر شود.
  5. به‌روزرسانی خودکار همه چیز در تولید: دستور wp plugin update --all در تولید می‌تواند سایت را از کار بیندازد.
  6. نادیده گرفتن گزینه --url در Multisite: این اشتباه می‌تواند به تغییرات ناخواسته در سایت اصلی منجر شود.
  7. عدم پاک‌سازی کش پس از تغییرات: تغییرات اعمال نمی‌شوند.
  8. استفاده از نسخه قدیمی WP-CLI: نسخه‌های قدیمی ممکن است با PHP جدید سازگار نباشند.
  9. ذخیره اطلاعات حساس در اسکریپت‌ها: رمز عبور و توکن‌ها باید در متغیرهای محیطی باشند.
  10. عدم تست در استیجینگ: هر دستور جدید باید ابتدا در محیط استیجینگ تست شود.

برای مطالعه بیشتر درباره اشتباهات رایج، مقاله اشتباهات رایج هنگام نصب افزونه وردپرس را ببینید.

پرسش‌های پرتکرار درباره WP-CLI

در این بخش، به پرسش‌های متداول درباره WP-CLI پاسخ می‌دهیم. این ساختار برای بهینه‌سازی محتوا برای موتورهای پاسخگو (Answer Engines) نیز مفید است.

WP-CLI چیست و چه کاربردی دارد؟

WP-CLI یک ابزار خط فرمان رسمی برای مدیریت وردپرس است. این ابزار امکان اجرای عملیات گسترده مانند نصب، به‌روزرسانی، پشتیبان‌گیری، مدیریت دیتابیس و پاک‌سازی را بدون ورود به پیشخوان فراهم می‌کند. WP-CLI به‌ویژه در اتوماسیون، CI/CD و مدیریت چند سایت کاربرد دارد.

آیا WP-CLI روی همه سرورها کار می‌کند؟

WP-CLI روی هر سروری که PHP 7.2.24 یا بالاتر و دسترسی خط فرمان داشته باشد، کار می‌کند. این ابزار روی هاست‌های اشتراکی محدود ممکن است در دسترس نباشد. برای سایت‌های جدی، VPS یا سرور اختصاصی توصیه می‌شود.

آیا استفاده از WP-CLI امن است؟

بله، اگر اصول امنیتی رعایت شود. WP-CLI به‌عنوان ابزار رسمی وردپرس توسعه داده می‌شود و کد آن قابل بازبینی است. نکات امنیتی شامل محدود کردن دسترسی، اجرا با کاربر صحیح و محافظت از wp-config.php است.

تفاوت WP-CLI با REST API چیست؟

WP-CLI برای مدیریت مستقیم روی سرور طراحی شده و دسترسی خط فرمان نیاز دارد. REST API برای یکپارچگی با سیستم‌های خارجی طراحی شده و از طریق HTTP کار می‌کند. WP-CLI سریع‌تر و قدرتمندتر است، اما REST API انعطاف‌پذیری بیشتری برای یکپارچگی دارد.

چگونه WP-CLI را روی هاست اشتراکی نصب کنیم؟

در برخی هاست‌های اشتراکی، امکان اجرای WP-CLI وجود دارد. باید فایل PHAR را دانلود و در مسیر کاربری قرار داد. اگر هاست اجازه اجرای دستورات shell را ندهد، WP-CLI کار نمی‌کند. در این صورت، استفاده از VPS یا سرور اختصاصی توصیه می‌شود.

آیا WP-CLI سرعت سایت را کاهش می‌دهد؟

خیر، WP-CLI مستقیماً روی سرعت سایت تأثیر نمی‌گذارد. این ابزار فقط در زمان اجرا منابع مصرف می‌کند. در واقع، استفاده از WP-CLI برای بهینه‌سازی دیتابیس و پاک‌سازی می‌تواند سرعت سایت را افزایش دهد.

چگونه از WP-CLI برای مهاجرت استفاده کنیم؟

با ترکیب wp db export، wp search-replace و wp db import. ابتدا دیتابیس خروجی گرفته می‌شود، سپس دامنه جایگزین می‌شود و در نهایت دیتابیس در سرور مقصد وارد می‌شود. همیشه ابتدا با --dry-run تست کنید.

آیا WP-CLI با ووکامرس سازگار است؟

بله. ووکامرس دستورات WP-CLI اختصاصی دارد که با wp wc قابل دسترسی هستند. این دستورات برای مدیریت محصولات، سفارش‌ها، مشتریان و کوپن‌ها از خط فرمان کاربرد دارند.

چگونه دستورات WP-CLI را در Cron قرار دهیم؟

با نوشتن یک اسکریپت Shell که دستورات را اجرا می‌کند و سپس ثبت آن در crontab. برای مثال، اجرای روزانه به‌روزرسانی:

0 3 * * * cd /var/www/html && wp core update && wp plugin update --all

آیا WP-CLI جایگزین افزونه‌های بکاپ می‌شود؟

تا حدی. دستور wp db export دیتابیس را خروجی می‌گیرد، اما فایل‌ها را پشتیبان‌گیری نمی‌کند. برای پشتیبان‌گیری کامل، باید فایل‌های wp-content را نیز با tar یا rsync کپی کنید. افزونه‌های بکاپ این کار را خودکار می‌کنند.

نکات پیشرفته برای مهندسان و تیم‌های DevOps

برای مهندسان ارشد و تیم‌های DevOps، WP-CLI فراتر از یک ابزار مدیریت است. در این بخش، به نکات پیشرفته‌ای می‌پردازیم که در پروژه‌های بزرگ حیاتی می‌شوند.

استفاده از WP-CLI در محیط‌های چندسایتی

در معماری‌های چندسایتی، WP-CLI می‌تواند به‌عنوان یک ابزار مرکزی برای مدیریت همه سایت‌ها استفاده شود. با ترکیب حلقه for در Shell و WP-CLI، می‌توان عملیات را روی همه سایت‌ها اجرا کرد:

#!/bin/bash
SITES=("site1.com" "site2.com" "site3.com")

for site in "${SITES[@]}"; do
    echo "Updating $site..."
    cd /var/www/$site
    wp core update --quiet
    wp plugin update --all --quiet
    wp cache flush --quiet
done

این رویکرد در مدیریت ده‌ها یا صدها سایت بسیار کارآمد است.

ادغام WP-CLI با Docker

در معماری‌های Docker-based، WP-CLI می‌تواند به‌عنوان یک سرویس جداگانه یا بخشی از image اصلی تعریف شود:

FROM wordpress:php8.2-apache

# Install WP-CLI
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 
    && chmod +x wp-cli.phar 
    && mv wp-cli.phar /usr/local/bin/wp

# Install MySQL client for db commands
RUN apt-get update && apt-get install -y default-mysql-client

WORKDIR /var/www/html

برای اجرای WP-CLI در یک کانتینر در حال اجرا:

docker exec -it wordpress_container wp plugin list
docker exec -it wordpress_container wp db export /tmp/backup.sql
docker cp wordpress_container:/tmp/backup.sql ./backup.sql

برای مطالعه بیشتر درباره Docker در توسعه وردپرس، مقاله تجربه کار با Docker در توسعه پروژه‌ها را ببینید.

پایش عملکرد با WP-CLI

WP-CLI می‌تواند برای پایش عملکرد سایت استفاده شود. دستور wp profile (افزونه رسمی) زمان اجرای دستورات را اندازه‌گیری می‌کند:

wp package install wp-cli/profile-command
wp profile stage --fields=stage,time,cache_ratio
wp profile hook --all
wp profile eval 'get_option("siteurl")'

این دستورات می‌توانند نشان دهند که کدام بخش از وردپرس بیشترین زمان را می‌گیرد. برای مطالعه بیشتر درباره خطاهای عملکردی، مقاله چگونه مشکل سرعت سایت را عیب‌یابی کنیم؟ را ببینید.

تحلیل دیتابیس با WP-CLI

دستور wp db query امکان اجرای کوئری‌های SQL دلخواه را فراهم می‌کند:

wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision'"
wp db query "SELECT option_name, LENGTH(option_value) FROM wp_options WHERE autoload = 'yes' ORDER BY LENGTH(option_value) DESC LIMIT 10"

این دستور برای تحلیل مستقیم دیتابیس بسیار مفید است. برای مطالعه بیشتر، مقاله ایندکس‌گذاری در دیتابیس را ببینید.

توسعه دستورات سفارشی با WP_CLI::runcommand

در دستورات سفارشی، می‌توان از WP_CLI::runcommand() برای اجرای دستورات دیگر WP-CLI استفاده کرد. این قابلیت برای ساخت workflowهای پیچیده حیاتی است:

WP_CLI::runcommand('plugin install woocommerce --activate', ['launch' => true]);
$result = WP_CLI::runcommand('option get siteurl', ['return' => true]);
WP_CLI::runcommand('cache flush', ['exit_error' => false]);

گزینه launch دستور را در یک فرآیند جداگانه اجرا می‌کند، گزینه return خروجی را برمی‌گرداند و exit_error تعیین می‌کند که در صورت خطا، فرآیند متوقف شود یا خیر.

محدودیت‌های WP-CLI در محیط‌های توزیع‌شده

در معماری‌های توزیع‌شده (مانند Kubernetes)، WP-CLI روی یک پاد (Pod) خاص اجرا می‌شود و ممکن است به دیتابیس مشترک متصل شود. این موضوع می‌تواند به مشکلات همزمانی (Race Condition) منجر شود. توصیه می‌شود در چنین محیط‌هایی، عملیات حساس در زمان‌های مشخص و با قفل‌گذاری مناسب انجام شود.

مدیریت نسخه‌های WP-CLI

نسخه WP-CLI باید در مستندات پروژه ثبت شود و در همه محیط‌ها یکسان باشد. تفاوت نسخه می‌تواند به رفتار متفاوت دستورات منجر شود. برای بررسی نسخه:

wp cli version
wp cli check-update
wp cli update

در پروژه‌های تیمی، توصیه می‌شود که نسخه WP-CLI در یک فایل .tool-versions یا مشابه ثبت شود تا همه اعضای تیم از نسخه یکسان استفاده کنند.

نکات باقی‌مانده در قالب نکات کلیدی

در پایان، چند نکته کلیدی که در مدیریت WP-CLI باید در خاطر بماند:

  • همیشه با --dry-run شروع کنید: به‌ویژه در دستورات search-replace و db import.
  • پشتیبان‌گیری پیش از عملیات حساس: دستور wp db export باید پیش از هر تغییر مهم اجرا شود.
  • در تولید از --all با احتیاط استفاده کنید: به‌روزرسانی همه افزونه‌ها می‌تواند سایت را از کار بیندازد.
  • گزینه --url را در Multisite فراموش نکنید: بدون آن، دستورات روی سایت اصلی اجرا می‌شوند.
  • دستورات را در اسکریپت‌های قابل بازبینی بگذارید: نه در تاریخچه shell.
  • پس از هر تغییر، کش را پاک کنید: wp cache flush و wp rewrite flush.
  • نسخه WP-CLI را در مستندات پروژه ثبت کنید: تا همه اعضای تیم از یک نسخه استفاده کنند.
  • دستورات سفارشی را در افزونه قرار دهید: نه در فایل‌های موقت.
  • از WP-CLI در CI/CD استفاده کنید: این ابزار یکی از ارکان استقرار خودکار است.
  • امنیت را جدی بگیرید: دسترسی به WP-CLI باید محدود و کنترل‌شده باشد.

اگر در پروژه‌های خود از WP-CLI استفاده می‌کنید، جالب است بدانم کدام دستور یا اسکریپت بیشترین تأثیر را در جریان کاری شما داشته است. تجربه خودتان را در دیدگاه‌ها بنویسید؛ به‌خصوص اگر راه‌حل خلاقانه‌ای برای اتوماسیون پیدا کرده‌اید که می‌تواند برای دیگران مفید باشد.