Ön Hazırlık ve Gereksinimler
Bu uygulamayı gerçekleştirmek için yerel bir geliştirme ortamına (LocalWP, XAMPP veya Docker) ve aktif bir WordPress kurulumuna ihtiyacınız vardır. Kodlarınızı doğrudan ana temanızın functions.php dosyasına ekleyebileceğiniz gibi, en iyi pratik olarak "Code Snippets" eklentisini kullanabilir veya kendi özel eklentinizi oluşturabilirsiniz.
- WordPress 6.0 ve üzeri sürüm.
- PHP 8.0 veya daha güncel bir sürüm.
- FTP erişimi veya WordPress yönetici paneli üzerinden dosya düzenleme yetkisi.
- Özel kullanıcı rolleri oluşturmak için "User Role Editor" eklentisi (opsiyonel).
Kullanıcı Rollerini Tanıma ve Kontrol Etme
Yönlendirme sistemini kurmadan önce, WordPress'in kullanıcı nesnesine nasıl erişeceğimizi bilmemiz gerekir. wp_get_current_user() fonksiyonu, o an giriş yapmış olan kullanıcıya ait tüm verileri bize sağlar. Aşağıdaki kod bloğu, mevcut kullanıcının rolünü nasıl kontrol edebileceğinizi gösterir.
function kullanici_rolunu_kontrol_et() {
if (is_user_logged_in()) {
$user = wp_get_current_user();
$roles = (array) $user->roles;
// İlk rolü al
$user_role = $roles[0];
return $user_role;
}
return false;
}
Bu fonksiyon, kullanıcının sisteme giriş yapıp yapmadığını kontrol eder ve giriş yapmışsa rolünü döndürür. Bu yapı, yönlendirme mantığımızın temelini oluşturacaktır.
Login Sonrası Yönlendirme Mantığını Kurma
WordPress giriş yaptıktan sonra kullanıcıyı varsayılan olarak yönetici paneline veya profil sayfasına yönlendirir. Bunu değiştirmek için login_redirect filtresini kullanırız. Bu filtre, giriş işlemi tamamlandığı anda tetiklenir ve bizi yönlendirme URL'sini değiştirmemize olanak tanır.
add_filter('login_redirect', 'ozel_rol_yonlendirmesi', 10, 3);
function ozel_rol_yonlendirmesi($redirect_to, $requested_redirect_to, $user) {
if (isset($user->roles) && is_array($user->roles)) {
if (in_array('editor', $user->roles)) {
return home_url('/editor-paneli/');
} elseif (in_array('subscriber', $user->roles)) {
return home_url('/profilim/');
}
}
return $redirect_to;
}
Yukarıdaki kod, 'editor' rolüne sahip kullanıcıyı özel bir panele, 'subscriber' (abone) rolüne sahip kullanıcıyı ise profil sayfasına gönderir. Diğer kullanıcılar varsayılan yönlendirme adresine devam eder.
Sayfa Erişimini Kısıtlama ve Güvenli Yönlendirme
Sadece giriş anında değil, kullanıcı belirli bir sayfaya erişmeye çalıştığında da rol kontrolü yapmak isteyebilirsiniz. Örneğin, bir editörün sadece kendi çalışma alanına girmesini sağlamak için template_redirect kancasını kullanırız.
add_action('template_redirect', 'rol_bazli_sayfa_kisitlamasi');
function rol_bazli_sayfa_kisitlamasi() {
if (is_page('yonetim-alani') && !current_user_can('edit_posts')) {
wp_redirect(home_url('/erisim-engellendi/'));
exit;
}
}
Bu kod bloğu, 'yonetim-alani' slug'ına sahip sayfaya girmeye çalışan ve 'edit_posts' yetkisi olmayan herkesi 'erisim-engellendi' sayfasına gönderir. exit komutu, kodun çalışmasını durdurarak güvenlik açısından kritik bir rol oynar.
Yöntemlerin Karşılaştırılması
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| login_redirect (Filtre) | Giriş anında hızlı ve temiz yönlendirme. | Sadece giriş sırasında çalışır. |
| template_redirect (Aksiyon) | Her sayfa yüklemesinde denetim sağlar. | Sunucu yükünü hafifçe artırabilir. |
| Eklenti Kullanımı | Kod bilmeden kolay kurulum. | Sitenizi yavaşlatabilir ve bağımlılık yaratır. |
Güvenlik Uyarıları ve En İyi Pratikler
Kritik Uyarı: WordPress yönlendirme işlemlerinde asla kullanıcıdan gelen ham veriye (örneğin
$_GETveya$_POSTparametrelerine) doğrudan güvenmeyin. Yönlendirme URL'lerini her zamanhome_url()veyaesc_url()gibi güvenli fonksiyonlarla oluşturun. Aksi takdirde "Open Redirect" (Açık Yönlendirme) zafiyetine yol açabilirsiniz.
Kodlarınızı üretim ortamına almadan önce mutlaka bir "Staging" (test) ortamında deneyin. Ayrıca, kullanıcıların önbellek (cache) nedeniyle yönlendirme hataları yaşamaması için tarayıcı önbelleğini temizlemeyi unutmayın.
Sıkça Sorulan Sorular
Özel bir kullanıcı rolü nasıl oluşturulur?
WordPress'in kendi fonksiyonu olan add_role() ile kod üzerinden veya "User Role Editor" gibi güvenilir eklentilerle arayüz üzerinden kolayca oluşturabilirsiniz.
Yönlendirme sırasında döngü hatası (Redirect Loop) alıyorum, neden?
Bu genellikle yönlendirdiğiniz sayfanın da bir yönlendirme kuralına dahil olmasından kaynaklanır. Koşullarınızda !is_page('hedef-sayfa') kontrolünü ekleyerek sonsuz döngüden kaçınabilirsiniz.
Yönetici (Admin) rolü için özel bir yönlendirme yapmalı mıyım?
Genellikle yöneticilerin WordPress panelini kullanması beklenir. Ancak çok özel bir durum yoksa, yöneticileri /wp-admin/ sayfasına yönlendirmek en sağlıklı yaklaşımdır.
Bu kodlar SEO'yu etkiler mi?
Doğru yapılandırılmış yönlendirmeler (302 geçici yönlendirme mantığıyla) SEO'yu olumsuz etkilemez. Ancak kullanıcıyı sürekli farklı sayfalara yönlendirmek "kötü kullanıcı deneyimi" olarak algılanabilir, bu yüzden dikkatli kullanılmalıdır.
Çoklu rol atanan kullanıcılar için hangisi öncelikli olur?
Yukarıdaki örneklerde $user->roles[0] kullandık. Eğer bir kullanıcının birden fazla rolü varsa, kodunuzda in_array() fonksiyonu ile hangi rolün daha yetkili olduğunu kontrol ederek öncelik sırasını siz belirlemelisiniz.
Özel Yönlendirme Mantığını Bir Eklentiye Dönüştürme
Yönlendirme kodlarını doğrudan temanızın functions.php dosyasına eklemek hızlı bir çözüm olsa da, tema değişikliklerinde bu kodların kaybolması riski vardır. Profesyonel bir yaklaşım, bu mantığı bağımsız bir eklenti haline getirmektir. Aşağıdaki yapı, kullanıcı rollerine göre yönlendirme yapan modüler bir eklenti iskeletidir.
/*
Plugin Name: Özel Rol Yönlendirme Yöneticisi
Description: Kullanıcı rollerine göre dinamik yönlendirme sağlar.
Version: 1.0
*/
if ( ! defined( 'ABSPATH' ) ) exit;
class RoleBasedRedirector {
public function __construct() {
add_filter( 'login_redirect', array( $this, 'handle_login_redirect' ), 10, 3 );
}
public function handle_login_redirect( $redirect_to, $request, $user ) {
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'editor', $user->roles ) ) {
return home_url( '/editor-paneli/' );
}
}
return $redirect_to;
}
}
new RoleBasedRedirector();
Performans ve Hata Ayıklama İpuçları
Yönlendirme sistemleri, her sayfa yüklemesinde veya giriş işleminde tetiklendiği için performans üzerinde doğrudan etkilidir. Özellikle template_redirect kancasını kullanırken veritabanı sorgularını minimize etmeniz gerekir.
Performans Optimizasyonu
- Object Caching: Kullanıcı rolü kontrollerini
wp_get_current_user()fonksiyonu ile yaparken, bu verinin önbellekten gelmesini sağlamak için Redis veya Memcached gibi sistemler kullanın. - Koşullu Yükleme: Yönlendirme mantığını sadece gerekli sayfalarda çalıştırın. Örneğin, admin panelinde zaten yönlendirme yapmanıza gerek yoksa
is_admin()kontrolünü en başta kullanın.
Hata Ayıklama (Debugging)
Yönlendirme döngülerini veya beklenmedik davranışları tespit etmek için WP_DEBUG modunu aktif edin. Aşağıdaki kod bloğu, yönlendirme sırasında hangi rolün tetiklendiğini log dosyasına yazmanıza yardımcı olur:
add_action( 'template_redirect', 'debug_role_redirect' );
function debug_role_redirect() {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
$user = wp_get_current_user();
if ( $user->exists() ) {
error_log( 'Mevcut Kullanıcı Rolü: ' . implode( ', ', $user->roles ) );
}
}
}
İleri Seviye: Özel Dashboard Tasarımı
Kullanıcıları sadece bir sayfaya yönlendirmek yerine, onlara özel bir arayüz sunmak kullanıcı deneyimini (UX) ciddi oranda artırır. WordPress'in varsayılan wp-admin panelini gizleyip, sadece o role özel bir sayfa şablonu atayarak profesyonel bir "Portal" görünümü oluşturabilirsiniz.
| Rol | Yönlendirme Hedefi | Erişim Seviyesi |
|---|---|---|
| Abone | Profil Sayfası | Sınırlı |
| Editör | Özel İçerik Yönetimi | Yüksek |
İpucu: Yönlendirme kurallarınızı oluştururken, kullanıcıların "Şifremi Unuttum" veya "Kayıt Ol" gibi kritik sayfalara erişimini asla engellemediğinizden emin olun. Aksi takdirde kullanıcılar sitenizde kilitli kalabilir.
Sonuç
WordPress ile özel bir kullanıcı rolüne göre yönlendirme sistemi kurmak, sitenizin profesyonellik seviyesini artıran ve kullanıcı etkileşimini optimize eden temel bir geliştirme becerisidir. Bu rehberde öğrendiğiniz login_redirect ve template_redirect kancaları, WordPress geliştirme dünyasında en çok ihtiyaç duyacağınız araçlardır.
Sorumluluk Reddi: Bu makaledeki kod örnekleri genel eğitim amaçlıdır. Uygulama öncesinde veritabanı yedeğinizi almanız ve kodları canlı sitenizde doğrudan çalıştırmadan önce test ortamında doğrulamanız önerilir. Yanlış yapılandırılmış yönlendirmeler sitenize erişimi engelleyebilir.
Bir sonraki adım olarak, bu yönlendirme mantığını bir "WordPress Eklentisi" haline getirerek farklı projelerinizde kolayca kullanabilir veya kullanıcı rolleri için özel "Dashboard" (kontrol paneli) sayfaları tasarlayarak deneyimi bir üst seviyeye taşıyabilirsiniz.


Yorumlar (0)
Yorum Yaz