وقتی پیشخوان وردپرس ساعت شما را میخورد
ساعت ۳ بامداد است و سایت با خطای «اتصال به دیتابیس برقرار نشد» از کار افتاده. برای رفع مشکل باید یک افزونه را غیرفعال کنید، اما حتی صفحه ورود به پیشخوان هم باز نمیشود. یا شاید ۲۰۰ مقاله دارید و باید در همه آنها آدرس دامنه را از example.com به example.ir تغییر دهید. از پیشخوان، این کار یعنی ۲۰۰ بار ویرایش دستی. با WP-CLI، هر دو کار در کمتر از یک دقیقه انجام میشود.
WP-CLI ابزار خط فرمانی است که تقریباً هر کاری را که از پیشخوان وردپرس انجام میدهید — و خیلی کارهای دیگر را که از پیشخوان نمیشود — از ترمینال ممکن میکند. این مقاله برای مدیری است که همین حالا با یکی از این مشکلات دستوپنجه نرم میکند، نه برای کسی که میخواهد «آشنایی کلی» پیدا کند.
نصب و بررسی سلامت WP-CLI
بیشتر هاستهای لینوکس امروز WP-CLI را از قبل دارند. اول بررسی کنید:
wp --info
اگر خروجی شامل نسخه PHP و مسیر نصب وردپرس باشد، آمادهاید. اگر نه، نصبش کنید:
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 --version
خروجی باید چیزی شبیه WP-CLI 2.11.0 باشد. اگر نسخه قدیمیتر از 2.8 است، ارتقا دهید؛ نسخههای قدیمی با PHP 8.2 و بالاتر مشکل دارند.
یک نکته مهم: WP-CLI باید از همان کاربری اجرا شود که فایلهای وردپرس متعلق به اوست. اگر با root اجرایش کنید، فایلهایی که میسازد مالکیتشان root میشود و بعداً برای آپلود یا ویرایش از پیشخوان با خطای «permission denied» مواجه میشوید. اینجا اشتباه میکنند: سایت را با کاربر www-data اجرا میکنند اما WP-CLI را با root صدا میزنند. نتیجه؟ یک روز بعد، افزونهای که باید آپدیت شود نمیشود و هیچکس نمیفهمد چرا.
بهروزرسانی هسته، افزونهها و قالب از خط فرمان
بهروزرسانی از پیشخوان وقتی سایت ترافیک واقعی دارد ریسک دارد: صفحه وسط کار رفرش میشود، کانکشن قطع میشود و نیمهکاره میماند. از ترمینال، اول بکاپ بگیرید، بعد بهروزرسانی کنید.
برای بهروزرسانی همه چیز — هسته، افزونهها، قالبها و فایلهای ترجمه — یک دستور کافی است:
wp core update
wp plugin update --all
wp theme update --all
wp language core update
اگر فقط میخواهید ببینید چه چیزی آپدیت دارد، بدون اینکه چیزی تغییر کند:
wp plugin list --update=available
خروجی جدولی نشان میدهد که کدام افزونهها نسخه جدید دارند و نسخه فعلی هر کدام چیست. این دستور را قبل از هر بهروزرسانی بزرگ اجرا کنید تا مطمئن شوید افزونهای که قرار است آپدیت شود با نسخه PHP شما سازگار است.
یک نکته که خیلیها نمیدانند: اگر سایت شما از هاست وردپرس مدیریتشده استفاده میکند، ممکن است بهروزرسانی خودکار از سمت هاست انجام شود و اجرای دستی wp core update با خطای «Another update is already in progress» مواجه شود. در این حالت صبر کنید تا فرایند هاست تمام شود، بعد دستور را اجرا کنید.
جستجو و جایگزینی در دیتابیس
تغییر دامنه، مهاجرت از HTTP به HTTPS، یا انتقال سایت از محیط توسعه به سرور اصلی — همه اینها یک نیاز مشترک دارند: جایگزینی یک رشته در تمام جدولهای دیتابیس. از پیشخوان، این کار یا غیرممکن است یا نیاز به افزونههای سنگین دارد.
دستور اصلی این است:
wp search-replace 'http://old-domain.com' 'https://new-domain.com' --all-tables --precise
فلگ --all-tables یعنی همه جدولها، نه فقط جدولهای پیشفرض وردپرس. فلگ --precise باعث میشود جایگزینی فقط روی رشتههای دقیق انجام شود، نه زیررشتهها. بدون این فلگ، اگر رشته شما example.com باشد و در دیتابیس www.example.com هم وجود داشته باشد، نتیجه خراب میشود.
قبل از اجرای واقعی، با فلگ --dry-run تست کنید:
wp search-replace 'http://old-domain.com' 'https://new-domain.com' --all-tables --dry-run
این دستور فقط تعداد موارد پیدا شده را گزارش میدهد بدون اینکه چیزی را تغییر دهد. عددی که میبینید باید با انتظارتان همخوانی داشته باشد. اگر صفر بود، رشته را اشتباه نوشتهاید یا دامنه درست را جایگزین میکنید.
یک هشدار جدی: اگر سایت شما از Object Cache استفاده میکند — مثلاً Redis — بعد از search-replace باید کش را پاک کنید. وگرنه سایت محتوای قدیمی را از کش سرو میکند و فکر میکنید دستور کار نکرده است. دستور پاک کردن کش با WP-CLI:
wp cache flush
خطای رایج در search-replace
رایجترین خطایی که دیدهام این است که کسی wp search-replace را روی دیتابیس یک سایت زنده اجرا میکند بدون بکاپ، و بعد میفهمد که رشتهای که جایگزین کرده در محتوای مقالهها هم وجود داشته که نباید تغییر میکرد. مثلاً جایگزینی example.com با example.ir ممکن است در متن مقالهای که درباره «تفاوت example.com و example.org» نوشته شده هم تغییر ایجاد کند. راهحل: همیشه اول بکاپ بگیرید، بعد با --dry-run تست کنید، و اگر شک داشتید از فلگ --include-columns استفاده کنید تا فقط ستونهای خاصی مثل post_content را تغییر دهید.
بازنشانی رمز کاربر از ترمینال
کاربری رمزش را فراموش کرده و ایمیل بازیابی هم به صندوق اسپم رفته. یا حساب مدیر هک شده و باید سریع رمز را عوض کنید. از پیشخوان که نمیتوانید وارد شوید. WP-CLI این کار را در یک خط انجام میدهد:
wp user update 1 --user_pass='YourNewStrongPassword'
عدد ۱ شناسه کاربری مدیر است. اگر نمیدانید شناسه کیست، اول لیست کاربران را ببینید:
wp user list --fields=ID,user_login,roles
این دستور جدولی نشان میدهد که کدام کاربر چه نقشی دارد. بعد از بازنشانی، به کاربر بگویید از گزینه «Lost your password?» در صفحه ورود استفاده کند تا خودش رمز جدیدی انتخاب کند. رمزی که شما میگذارید فقط برای ورود اولیه است.
اگر میخواهید کاربر جدیدی با نقش مدیر بسازید:
wp user create john john@example.com --role=administrator --user_pass='TempPass123'
بعد از ساخت، حتماً از کاربر بخواهید رمز را عوض کند. هیچوقت با رمز موقتی که در تاریخچه ترمینال سرور مانده رهايش نکنید.
غیرفعال کردن افزونهای که سایت را از کار انداخته
سایت خطای مرگبار (WSOD) داده و صفحه سفید است. از پیشخوان که راهی نیست. با WP-CLI میتوانید همه افزونهها را یکجا غیرفعال کنید:
wp plugin deactivate --all
سایت برمیگردد. حالا یکییکی فعال کنید تا مقصر پیدا شود:
wp plugin activate woocommerce
بعد از هر فعالسازی، سایت را چک کنید. اگر خطا برگشت، همان افزونه مقصر است. این روش تشخیص خیلی سریعتر از لاگ نگاه کردن است، مخصوصاً وقتی خطا در لاگها ثبت نمیشود.
اگر فقط یک افزونه خاص را میخواهید غیرفعال کنید:
wp plugin deactivate akismet
مدیریت Cron و پاکسازی خودکار
وردپرس کارهای زمانبندی شده را از طریق cron خودش اجرا میکند. وقتی سایت شلوغ است، این cronها ممکن است اجرا نشوند یا چند بار اجرا شوند. با WP-CLI میبینید چه رویدادهایی در صف هستند:
wp cron event list
اگر رویدادی گیر کرده و مدام اجرا میشود، حذفش کنید:
wp cron event delete event_name
برای اجرای دستی همه رویدادهای آماده:
wp cron event run --due-now
این دستور مخصوصاً بعد از انتقال سایت به سرور جدید مفید است، چون cronهای قدیمی ممکن است به دامنه قبلی اشاره کنند.
اینجا اشتباه میکنند: اجرای WP-CLI در مسیر اشتباه
بزرگترین اشتباهی که در کار عملی با WP-CLI میبینم این است که مدیر دستور را از پوشهای غیر از ریشه وردپرس اجرا میکند. مثلاً از /home/user دستور wp plugin list را میزند و خطای «Error: This does not seem to be a WordPress installation» میگیرد. راهحل ساده است: یا به پوشه وردپرس بروید (cd /var/www/html) یا از فلگ --path استفاده کنید:
wp plugin list --path=/var/www/html
اگر سایت شما در سابدایرکتوری نصب شده — مثلاً example.com/blog — و میخواهید از ریشه دستور بزنید، حتماً --path را به مسیر سابدایرکتوری بدهید. در غیر این صورت WP-CLI فکر میکند ریشه سایت همان جایی است که هستید و خطا میدهد.
بکاپ سریع قبل از هر عملیات خطرناک
قبل از هر search-replace یا بهروزرسانی بزرگ، یک بکاپ از دیتابیس بگیرید. با WP-CLI این کار یک خط است:
wp db export /backup/site-$(date +%Y%m%d).sql
این دستور فایل SQL را با تاریخ در نامش ذخیره میکند. اگر خراب شد، برگردانید:
wp db import /backup/site-20250615.sql
بکاپ فایلها هم مهم است، اما WP-CLI فقط دیتابیس را مدیریت میکند. برای فایلها از rsync یا ابزارهای مشابه استفاده کنید. یک عادت خوب: قبل از هر بهروزرسانی هسته، هم دیتابیس و هم فایلهای wp-content را بکاپ بگیرید. بعد از بهروزرسانی، اگر خطایی دیدید، برگردانید و مشکل را در محیط تست حل کنید.
WP-CLI روی هاست اشتراکی
اگر روی هاست اشتراکی هستید و WP-CLI از قبل نصب نیست، میتوانید فایل phar را در پوشه خودتان نگه دارید و با PHP اجرایش کنید:
php wp-cli.phar plugin list
این روش کمی کندتر است اما کار میکند. محدودیت اصلی هاست اشتراکی این است که بعضی دستورها مثل wp core download ممکن است به دلیل محدودیت حافظه یا timeout اجرا نشوند. در این حالت، یا از هاست خود بپرسید WP-CLI را نصب کند، یا کارهای سنگین را روی هاست لینوکس اختصاصی انجام دهید. اگر به تازگی میخواهید سایت را منتقل کنید، راهنمای مستندات و پایگاه دانش سرورنت را ببینید.
اتوماسیون با WP-CLI
وقتی دستورها را یاد گرفتید، قدم بعدی اتوماسیون است. یک اسکریپت ساده bash که هر هفته اجرا میشود و بهروزرسانیها را اعمال میکند:
#!/bin/bash
cd /var/www/html
wp db export /backup/weekly-$(date +%Y%m%d).sql
wp plugin update --all
wp theme update --all
wp core update
این اسکریپت را با cron اجرا کنید. اما قبل از آن، یک نکته مهم: بهروزرسانی خودکار افزونهها میتواند سایت را بشکند اگر افزونهای با نسخه جدید PHP یا وردپرس ناسازگار باشد. پیشنهاد من: بهروزرسانی هسته را خودکار کنید، اما افزونهها را هفتهای یکبار دستی بررسی کنید. اگر افزونهای حیاتی دارید — مثل درگاه پرداخت — هرگز آن را در بهروزرسانی خودکار قرار ندهید.
برای مانیتورینگ سلامت سایت بعد از بهروزرسانیها، ابزارهای پایش آپتایم میتوانند به شما هشدار دهند اگر سایتی از کار افتاد. راهنمای پایش آپتایم سایت را ببینید تا هشدارهای قطعی را بدون خطای کاذب تنظیم کنید.
عیبیابی با WP-CLI
وقتی سایت خطا میدهد اما لاگها چیزی نشان نمیدهند، WP-CLI میتواند اطلاعات دقیق بدهد:
wp db check
این دستور سلامت دیتابیس را بررسی میکند. اگر جدولی خراب باشد، گزارش میدهد. برای بررسی تنظیمات PHP:
wp eval 'echo ini_get("memory_limit");'
این دستور مقدار memory_limit را نشان میدهد. اگر سایت با خطای «Allowed memory size exhausted» مواجه است، این عدد را چک کنید. مقدار پیشنهادی برای وردپرس مدرن حداقل 256M است.
برای دیدن لاگ خطاهای PHP به صورت زنده:
wp debug
این دستور لاگهای اخیر را نشان میدهد و میتواند خیلی سریعتر از گشتن در فایلها مشکل را پیدا کند.
جمعبندی عملی
WP-CLI ابزاری است که وقتی به آن مسلط شوید، دیگر از پیشخوان برای کارهای مدیریتی استفاده نمیکنید. بهروزرسانی، search-replace، بازنشانی رمز، غیرفعال کردن افزونه خراب — همه در چند ثانیه از ترمینال. هزینهاش؟ یک روز یادگیری و عادت کردن به خط فرمان. اگر تا حالا با ترمینال کار نکردهاید، منحنی یادگیری کمی دارد، اما ارزشش را دارد.
اولین کاری که باید بکنید: روی یک سایت تستی — نه سایت اصلی — دستور wp plugin list را اجرا کنید و خروجی را ببینید. بعد wp db export را امتحان کنید و فایل SQL را باز کنید. وقتی با این دو دستور راحت شدید، بقیهاش ساده است.
اگر سایت شما روی هاستی است که SSH ندارد، یا WP-CLI نصب نیست، از هاست خود بخواهید نصبش کند. اگر نکردند، وقت تغییر هاست است. ابزاری که کار روزانه شما را از یک ساعت به یک دقیقه کاهش میدهد، حق شماست، نه امتیاز.
پرسشهای پرتکرار
WP-CLI چیست و چه کاربردی دارد؟
WP-CLI یک ابزار خط فرمان برای مدیریت وردپرس است. با آن میتوانید بهروزرسانی، بکاپ، مدیریت کاربران، جستجو و جایگزینی در دیتابیس و بسیاری کارهای دیگر را بدون نیاز به مرورگر انجام دهید.
آیا WP-CLI روی هاست اشتراکی کار میکند؟
بستگی به هاست دارد. بعضی هاستهای اشتراکی WP-CLI را از قبل نصب دارند. اگر ندارند، میتوانید فایل phar را دانلود و با PHP اجرا کنید، اما بعضی دستورهای سنگین ممکن است با محدودیت منابع مواجه شوند.
چطور با WP-CLI رمز مدیر را عوض کنم؟
دستور wp user update 1 --user_pass='NewPassword' را از پوشه ریشه وردپرس اجرا کنید. عدد ۱ شناسه کاربری مدیر است. اگر نمیدانید شناسه کیست، اول wp user list را اجرا کنید.
آیا WP-CLI به سایت آسیب میزند؟
خود WP-CLI به سایت آسیب نمیزند، اما دستورهایی مثل search-replace اگر بدون بکاپ و تست اجرا شوند میتوانند دادهها را خراب کنند. همیشه قبل از عملیات خطرناک بکاپ بگیرید و با فلگ --dry-run تست کنید.
دیدگاهها ۰
هنوز دیدگاهی ثبت نشده؛ اولین نفر باشید!