Aşağıdaki kod WordPress veritabanını ve `wp-content/uploads` dizinini tarayarak, görselleri kontrol edecek ve ilişkili bir yazı/post bulunmazsa bu dosyaları ve veritabanındaki kayıtlarını silecektir. Betiği çalıştırmadan önce, WordPress veritabanı bilgilerinizle ve dosya dizin yollarınızla ilgili değişiklikleri yapmayı unutmayın. Ayrıca yedekleme yapmadan bu işlemi sakın denemeyin. Kodları kontrol etmedim ancak çalışacağını düşünüyorum. Bir php dosyası oluşturup kodları içine yapıştırın veritabanı bilgilerinizi de güncelleyin ardından $wp_upload_dir değişkenindeki yolu da düzeltin. Eğer wordpress veritabanı tablolarınızdaki ön ek wp_ değilse koddaki tüm wp_ alanlarını da sizin ön ekiniz ile değiştirmeyi unutmayın.
Aşağıdaki kodları temizlik.php dosyası oluşturup cronjob'a eklerseniz düzenli olarak arka planda kontrol edip kütüphanenizi temizleyecektir.
// WordPress veritabanı bilgileri
$db_name = 'your_db_name';
$db_user = 'your_db_user';
$db_password = 'your_db_password';
$db_host = 'localhost';
// WordPress dosya sistemi
$wp_upload_dir = '/path/to/wordpress/wp-content/uploads';
// Veritabanı bağlantısı
$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
if ($mysqli->connect_error) {
die("Bağlantı hatası: " . $mysqli->connect_error);
}
// Görsellere ait kayıtların çekilmesi
$sql = "SELECT * FROM wp_postmeta WHERE meta_key = '_wp_attached_file'";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$file_path = $wp_upload_dir . '/' . $row['meta_value'];
$post_id = $row['post_id'];
// Post kontrolü
$post_check_sql = "SELECT * FROM wp_posts WHERE ID = $post_id";
$post_check_result = $mysqli->query($post_check_sql);
// İlişkili post yoksa sil
if ($post_check_result->num_rows == 0) {
// Dosyayı sil
if (file_exists($file_path)) {
unlink($file_path);
echo "Silindi: " . $file_path . "\n";
}
// Veritabanı kaydını sil
$delete_sql = "DELETE FROM wp_postmeta WHERE meta_id = ".$row['meta_id'];
if ($mysqli->query($delete_sql) === TRUE) {
echo "Veritabanından silindi: " . $row['meta_id'] . "\n";
} else {
echo "Hata: " . $mysqli->error . "\n";
}
}
}
} else {
echo "Görsel kaydı bulunamadı.";
}
$mysqli->close();
Harika oldu çok teşekkür ederim