وبلاگ
رفع مشکل باز نشدن عکس های وردپرس بعد از اضافه شدن .avif به نام فایلها
یکی از مشکلاتی که بعضی مدیران سایتهای وردپرسی با آن مواجه میشوند این است که ناگهان تصاویر سایت نمایش داده نمیشوند، در حالی که فایلها هنوز داخل هاست وجود دارند.
وقتی فایلها را داخل هاست بررسی میکنید، متوجه میشوید که انتهای اسم تصاویر یک .avif اضافه شده است. مثلاً فایل زیر:
photo1656174536-1-150x150.jpg
به این تبدیل شده:
photo1656174536-1-150x150.jpg.avif
در این حالت وردپرس هنوز دنبال فایل اصلی (.jpg) میگردد، اما فایل واقعی تغییر نام داده و به همین دلیل تصاویر سایت لود نمیشوند.
این مشکل چرا اتفاق میافتد؟
معمولاً این مشکل بعد از یکی از موارد زیر رخ میدهد:
- فعالسازی افزونههای بهینهسازی تصویر
- تبدیل خودکار تصاویر به فرمت AVIF
- تنظیمات اشتباه کش یا CDN
- مهاجرت سایت به هاست جدید
- تنظیمات اشتباه LiteSpeed Cache
- تداخل افزونههای WebP / AVIF
در بسیاری از موارد، سیستم به جای ساخت نسخه جدید AVIF، نام فایل اصلی را تغییر میدهد و .avif به انتهای فایل اضافه میشود.
از کجا بفهمیم دقیقاً همین مشکل را داریم؟
اگر علائم زیر را دارید، احتمالاً مشکل شما همین است:
- تصاویر سایت ناگهان ناپدید شدهاند
- داخل رسانه وردپرس عکسها Broken هستند
- در سورس صفحه هنوز لینک
.jpgیا.pngوجود دارد - داخل هاست فایلها به شکل
.jpg.avifذخیره شدهاند
مثال :
image.jpg.avif
image.png.avif
image.jpeg.avif
راهحل سریع: حذف گروهی .avif از انتهای فایلها
اگر تعداد فایلها زیاد است، تغییر دستی اسم فایلها تقریباً غیرممکن است.
راهحل امن این است که یک اسکریپت PHP اجرا کنیم تا فقط .avif انتهای فایلها حذف شود.
مرحله 1: ورود به پوشه Uploads
داخل هاست وارد مسیر زیر شوید:
wp-content/uploads
مرحله 2: ساخت فایل PHP
یک فایل جدید بسازید با نام:
fix-avif.php
مرحله 3: قرار دادن کد
کد زیر را داخل فایل قرار دهید:
AVIF Rename Started(Tondtar Group)";
echo "
";
try {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$baseDir,
RecursiveDirectoryIterator::SKIP_DOTS
)
);
foreach ($iterator as $file) {
if (!$file->isFile()) {
continue;
}
$filePath = $file->getPathname();
if (preg_match('/\.(jpg|jpeg|png|gif|webp)\.avif$/i', $filePath)) {
$newPath = preg_replace('/\.avif$/i', '', $filePath);
if (file_exists($newPath)) {
echo "⚠️ Skipped (already exists):
";
echo htmlspecialchars($newPath) . "
";
$skipped++;
continue;
}
if (@rename($filePath, $newPath)) {
echo "✅ Renamed:
";
echo htmlspecialchars($filePath) . "
";
echo "➡️ " . htmlspecialchars($newPath) . "
";
$count++;
} else {
echo "❌ Failed:
";
echo htmlspecialchars($filePath) . "
";
$failed++;
}
}
}
?>
مرحله 4: اجرای فایل
حالا فایل را داخل مرورگر اجرا کنید:
https://yourdomain.com/wp-content/uploads/fix-avif.php
بعد از اجرا، فایلهایی که این شکلی هستند:
photo1656174536-1-150x150.jpg.avif
به این تبدیل میشوند:
photo1656174536-1-150x150.jpg
و میتونید خروجی کار رو مانند تصویر روبرو مشاهده کنید :
نکته مهم امنیتی (حتماً بخوانید)
بعد از اینکه عملیات تمام شد و تصاویر سایت برگشت:
فایل fix-avif.php را از هاست حذف کنید.
این فایل فقط برای یکبار اجرا ساخته شده و نباید داخل سایت باقی بماند.
همچنین بهتر است قبل از اجرا از پوشه uploads بکاپ بگیرید.
اگر بعد از تغییر نام، عکسها هنوز نمایش داده نشدند چه کنیم؟
اگر فایلها درست rename شدند ولی تصاویر هنوز لود نمیشوند، معمولاً مشکل از کش است.
این موارد را انجام دهید:
- کش وردپرس را پاک کنید
- اگر LiteSpeed Cache دارید، Purge All بزنید
- کش CDN یا Cloudflare را پاک کنید
- صفحه سایت را با
Ctrl + F5رفرش کنید
در بیشتر مواقع بعد از پاک کردن کش، تصاویر برمیگردند.
سوالات متداول
خیر. این اسکریپت فقط فایلهایی که دقیقاً انتهای نامشان .avif است را rename میکند و فایلهای دیگر را دست نمیزند.
بله. چون فقط نام فایلهای واقعی داخل هاست اصلاح میشود و تغییری در دیتابیس ایجاد نمیکند.
اگر تصاویر لود نشوند، میتواند روی Image SEO و تجربه کاربری تاثیر منفی بگذارد. بهتر است مشکل سریع برطرف شود تا تصاویر دوباره در دسترس گوگل و کاربران قرار بگیرند.
جمع بندی
اگر تصاویر وردپرس شما باز نمیشوند و داخل هاست انتهای اسم فایلها .avif اضافه شده، نیازی به تغییر دستی هزاران فایل نیست. با یک اسکریپت ساده میتوانید بهصورت گروهی نام فایلها را اصلاح کنید و سایت را در چند دقیقه به حالت عادی برگردانید.