Wordpress İle Özel Bir Veritabanı Optimizasyon Eklentisi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce geliştirme ortamınızın hazır olduğundan emin olmalısınız. Yerel bir sunucu (Localhost) üzerinde çalışmanız, veritabanı üzerinde yapacağınız denemelerin canlı sitenize zarar vermemesi için zorunludur.

  • PHP 8.2 veya üzeri: Modern sözdizimi ve performans iyileştirmeleri için gereklidir.
  • WordPress 6.5+: Güncel API'ler ve güvenlik standartları için.
  • Veritabanı Erişimi: phpMyAdmin veya WP-CLI araçlarına hakimiyet.
  • Kod Editörü: VS Code veya benzeri, PHP eklentileri yüklü bir editör.
Kritik Uyarı: Veritabanı üzerinde silme işlemi yapacak her türlü kod, geri dönüşü olmayan veri kaybına yol açabilir. Eklentinizi geliştirmeden önce mutlaka veritabanı yedeğinizi alın ve asla canlı (production) ortamda test etmeyin.

Eklenti Yapısını Oluşturma

WordPress eklentileri, wp-content/plugins/ dizini altında bulunan bir klasör ve ana PHP dosyası ile başlar. Eklentimizin temel bilgilerini tanımlayarak dosya yapısını oluşturalım.


/*
Plugin Name: WP Veritabanı Optimizasyon Uzmanı
Description: Veritabanı gereksiz verilerini temizleyen özel optimizasyon aracı.
Version: 1.0.0
Author: Yazılım Eğitmeni
*/

if (!defined('ABSPATH')) {
    exit; // Doğrudan erişimi engelle
}

Yukarıdaki kod, eklentinin WordPress tarafından tanınmasını sağlar. ABSPATH kontrolü, güvenlik açısından hayati öneme sahiptir; bu, dosyanın doğrudan tarayıcı üzerinden çağrılmasını engeller.

WordPress Veritabanı Sınıfı ile Sorgu Yönetimi

WordPress'in yerleşik $wpdb sınıfı, veritabanı işlemlerini güvenli bir şekilde yönetmemizi sağlar. SQL Injection saldırılarından korunmak için doğrudan sorgu çalıştırmak yerine prepare() metodunu kullanmalıyız.


global $wpdb;

// Gereksiz revizyonları temizleme örneği
$wpdb->query(
    $wpdb->prepare(
        "DELETE FROM {$wpdb->posts} WHERE post_type = %s AND post_status = %s",
        'revision',
        'inherit'
    )
);

Bu kod bloğu, veritabanındaki tüm eski yazı revizyonlarını temizler. %s kullanımı, SQL sorgusuna dışarıdan gelen verilerin güvenli bir şekilde işlenmesini garanti eder.

Optimizasyon Fonksiyonlarını Adım Adım Yazma

Veritabanı temizliği için modüler fonksiyonlar oluşturmak, bakım kolaylığı sağlar. Aşağıda, geçici verileri (transients) temizleyen bir fonksiyon yapısı bulunmaktadır.


function optimize_db_transients() {
    global $wpdb;
    $deleted = $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'");
    return $deleted;
}

Bu fonksiyon, WordPress'in geçici olarak sakladığı ve süresi dolmuş olabilecek verileri temizler. Bu işlem, özellikle çok fazla eklenti kullanılan sitelerde veritabanı boyutunu ciddi oranda küçültür.

Eklenti İçin Yönetim Paneli Arayüzü

Kullanıcının optimizasyon işlemini manuel olarak tetikleyebilmesi için bir admin sayfası oluşturmalıyız. add_menu_page fonksiyonu ile WordPress yönetimine yeni bir sekme ekliyoruz.


add_action('admin_menu', 'db_opt_menu');

function db_opt_menu() {
    add_menu_page(
        'Veritabanı Optimizasyon',
        'DB Optimize',
        'manage_options',
        'db-optimize-plugin',
        'render_db_opt_page'
    );
}

Bu kod, WordPress sol menüsünde "DB Optimize" başlığıyla yeni bir panel oluşturur. render_db_opt_page fonksiyonu içerisinde HTML formunuzu ve temizleme butonunuzu oluşturabilirsiniz.

Veritabanı Optimizasyon Yöntemleri Karşılaştırması

Aşağıdaki tablo, farklı veritabanı temizleme yaklaşımlarının avantaj ve dezavantajlarını özetlemektedir.

Yöntem Avantaj Dezavantaj
SQL Sorgusu Çok hızlı ve doğrudan Hata riski yüksek
WP-CLI Otomasyona uygun Sunucu erişimi gerektirir
Eklenti Arayüzü Kullanıcı dostu Ek yük oluşturabilir

Güvenlik ve Hata Ayıklama İpuçları

Kodunuzu yazarken güvenlik en öncelikli konudur. Kullanıcıdan alınan her veri mutlaka doğrulanmalı ve temizlenmelidir. Ayrıca WP_DEBUG modunu açık tutarak hata mesajlarını takip etmelisiniz.


// Hata ayıklama için log tutma
if (WP_DEBUG) {
    error_log('Veritabanı optimizasyonu başlatıldı.');
}
Sorumluluk Reddi: Bu makalede paylaşılan kodlar eğitim amaçlıdır. Veritabanı üzerinde yapılan işlemler, eklenti çakışmaları veya yanlış SQL sorguları veri kaybına neden olabilir. Uygulama öncesi mutlaka tam yedek alınız. Oluşabilecek veri kayıplarından yazar sorumlu tutulamaz.

Sıkça Sorulan Sorular

Eklentiyi her gün çalıştırmalı mıyım?

Hayır, veritabanı optimizasyonu haftada bir veya ayda bir kez yapılması yeterli bir işlemdir. Çok sık çalıştırmak sistem kaynaklarını gereksiz tüketebilir.

SQL Injection nedir ve nasıl korunurum?

SQL Injection, veritabanı sorgularına kötü niyetli kodların enjekte edilmesidir. WordPress'in $wpdb->prepare() metodunu kullanarak verileri her zaman filtrelemelisiniz.

Bu eklenti site hızını artırır mı?

Evet, şişmiş bir veritabanı sorgu sürelerini yavaşlatır. Gereksiz verilerin temizlenmesi, özellikle büyük içerikli sitelerde sayfa yüklenme sürelerinde iyileşme sağlar.

Revizyonları tamamen silmek güvenli mi?

Eski revizyonları silmek güvenlidir, ancak yanlışlıkla silmek istediğiniz bir taslağı kaybedebilirsiniz. Bu yüzden sadece belirli bir süreden eski revizyonları silmeyi tercih edebilirsiniz.

WP-CLI ile bu eklentiyi nasıl çalıştırırım?

Eklentinize bir WP-CLI komutu ekleyerek, terminal üzerinden wp db-optimize run komutuyla işlemleri tetikleyebilirsiniz.

WP-Cron ile Otomatik Optimizasyon Zamanlama

Eklentinizin manuel olarak çalıştırılması yerine, belirli aralıklarla otomatik olarak temizlik yapmasını sağlamak veritabanı sağlığınız için kritik bir adımdır. WordPress'in yerleşik WP-Cron sistemini kullanarak, veritabanı yükünü arka planda hafifletebilirsiniz.

Aşağıdaki kod bloğu, eklentiniz aktif edildiğinde bir zamanlanmış görev oluşturur ve eklenti devre dışı bırakıldığında bu görevi temizler:


// Eklenti aktivasyonunda cron görevini ekle
register_activation_hook(__FILE__, 'my_db_optimizer_activation');
function my_db_optimizer_activation() {
    if (!wp_next_scheduled('my_db_optimizer_daily_event')) {
        wp_schedule_event(time(), 'daily', 'my_db_optimizer_daily_event');
    }
}

// Cron tetiklendiğinde çalışacak fonksiyon
add_action('my_db_optimizer_daily_event', 'run_automated_optimization');
function run_automated_optimization() {
    global $wpdb;
    // Örneğin: 30 günden eski revizyonları sil
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < DATE_SUB(NOW(), INTERVAL 30 DAY)");
}

// Eklenti devre dışı bırakıldığında görevi temizle
register_deactivation_hook(__FILE__, 'my_db_optimizer_deactivation');
function my_db_optimizer_deactivation() {
    $timestamp = wp_next_scheduled('my_db_optimizer_daily_event');
    wp_unschedule_event($timestamp, 'my_db_optimizer_daily_event');
}

Veritabanı Tablo Analizi ve İleri Düzey Raporlama

Sadece silme işlemi yapmak yeterli değildir; hangi tablonun ne kadar yer kapladığını ve "overhead" (boş alan) miktarını kullanıcıya göstermek, eklentinizin profesyonel bir araç gibi görünmesini sağlar. SHOW TABLE STATUS sorgusu ile bu verilere kolayca ulaşabilirsiniz.

Aşağıdaki fonksiyon, veritabanınızdaki tabloların durumunu bir dizi olarak döndürür:


function get_db_status_report() {
    global $wpdb;
    $results = $wpdb->get_results("SHOW TABLE STATUS");
    $report = [];

    foreach ($results as $row) {
        $report[] = [
            'name' => $row->Name,
            'size_mb' => round(($row->Data_length + $row->Index_length) / 1024 / 1024, 2),
            'overhead_mb' => round($row->Data_free / 1024 / 1024, 2)
        ];
    }
    return $report;
}

Bu verileri bir HTML tablosu içerisinde yönetici panelinde sergileyerek, kullanıcılarınızın hangi tabloların "Optimize Et" butonuna ihtiyaç duyduğunu görselleştirmelerini sağlayabilirsiniz. Özellikle wp_options veya wp_commentmeta gibi tabloların boyutunu takip etmek, sitenizin uzun vadeli performansını korumak için elzemdir.

İpucu: Çok büyük veritabanlarında OPTIMIZE TABLE komutu, işlem bitene kadar tabloyu kilitleyebilir. Bu nedenle, yoğun trafik alan sitelerde bu işlemi gece saatlerinde veya düşük trafikli zamanlarda gerçekleştirmeniz önerilir.

Sonuç

WordPress ile özel bir veritabanı optimizasyon eklentisi geliştirmek, sitenizin performansını optimize etmenin en etkili yollarından biridir. Bu rehberde öğrendiğiniz $wpdb kullanımı, güvenlik önlemleri ve eklenti yapısı sayesinde, kendi ihtiyaçlarınıza göre şekillendirilmiş profesyonel bir araç oluşturabilirsiniz. Bir sonraki adım olarak, eklentinize zamanlanmış görevler (WP-Cron) ekleyerek optimizasyon işlemini tamamen otomatize etmeyi deneyebilirsiniz.

Bu yazıya tepkinizi paylaşın:
Kerem Demir

Dijital araçlar ve kişisel verimlilik üzerine uzmanlaşmış profesyonel bir yazarım. Karmaşık konuları basit ve anlaşılır kılmak için rehber odaklı içerikler üretiyorum.

Yorumlar (0)

Yorum Yaz