WordPress Admin Paneli Menüsünden Gereksiz Öğeleri Kaldırma
WordPress yönetim panelini ilk kurduğunuzda karşınıza çıkan menü, çoğu zaman ihtiyacınızdan fazla öğe barındırır. Özellikle müşterileriniz için site kuruyorsanız ya da bir ekiple çalışıyorsanız, bu karmaşık menü yapısı hem kafa karışıklığı yaratır hem de güvenlik açısından istenmeyen erişimlere kapı açabilir. functions.php dosyasına ekleyeceğiniz birkaç satır kod ile bu sorunu kökten çözebilirsiniz.
Neden Admin Menüsünü Düzenlemeliyiz?
Bir müşteriye WordPress sitesi teslim ettiğinizi düşünün. Müşteri panele girdiğinde “Araçlar”, “Eklentiler”, “Görünüm > Tema Dosyası Düzenleyici” gibi onlarca seçenekle karşılaşıyor. Bu seçeneklerin büyük çoğunluğuna hiç dokunmaması gerekiyor, hatta dokunursa sitenin bozulma riski var. Ya da bir WooCommerce mağazası yönetiyorsunuz ve editör rolündeki çalışanlarınızın sadece ürün ve sipariş bölümlerine erişmesini istiyorsunuz.
Menü temizliğinin sağladığı avantajlar:
- Kullanıcılar için daha sade ve anlaşılır bir arayüz
- Yanlışlıkla kritik ayarlara müdahale riskinin azalması
- Rol tabanlı erişim kontrolünü destekleyen daha temiz bir yapı
- Müşteri teslim projelerinde profesyonel bir görünüm
- Güvenlik açısından “en az yetki” prensibinin uygulanması
functions.php Dosyasına Nasıl Ulaşırsınız?
Kodları eklemeden önce doğru dosyaya ulaştığınızdan emin olun. Çocuk tema (child theme) kullanıyorsanız, değişiklikleri mutlaka çocuk temanın functions.php dosyasına yapın. Ana temanın dosyasına yapılan değişiklikler tema güncellemesinde silinir.
Dosyaya ulaşmanın iki yolu var:
- FTP/SFTP ile:
wp-content/themes/temaniz/functions.phpyolunu takip edin - WordPress Yönetim Paneli üzerinden: Görünüm > Tema Dosyası Düzenleyici (ancak bu editörü production ortamında kullanmanızı önermem)
Ben genellikle şöyle bir yapı tercih ederim: Tüm özelleştirmeleri ayrı bir dosyada tutup functions.php içinden include ederim. Örneğin wp-content/themes/temaniz/inc/admin-cleanup.php gibi bir dosya oluşturup şunu eklerim:
// functions.php içine ekleyin
require_once get_template_directory() . '/inc/admin-cleanup.php';
Bu sayede functions.php şişmez ve değişikliklerinizi daha kolay yönetirsiniz.
Temel Menü Öğelerini Kaldırma
WordPress’in remove_menu_page() fonksiyonu, üst menü öğelerini kaldırmak için kullanılır. Bu fonksiyon admin_menu hook’una bağlanarak çalışır. Her menü öğesinin bir “slug” değeri vardır ve bu slug’u bilmeden menüyü kaldıramazsınız.
Yaygın kullanılan menü slug’ları:
- edit.php: Yazılar
- upload.php: Medya
- edit.php?post_type=page: Sayfalar
- edit-comments.php: Yorumlar
- themes.php: Görünüm
- plugins.php: Eklentiler
- users.php: Kullanıcılar
- tools.php: Araçlar
- options-general.php: Ayarlar
- woocommerce: WooCommerce
- edit.php?post_type=product: Ürünler (WooCommerce)
Basit bir örnek ile başlayalım. Aşağıdaki kod, yönetici dışındaki tüm kullanıcılardan “Araçlar” ve “Yorumlar” menülerini gizler:
function sysadmin_remove_menu_items() {
// Sadece yönetici değilse uygula
if ( ! current_user_can( 'administrator' ) ) {
remove_menu_page( 'tools.php' );
remove_menu_page( 'edit-comments.php' );
}
}
add_action( 'admin_menu', 'sysadmin_remove_menu_items' );
Alt Menü Öğelerini Kaldırma
Bazen üst menüyü tamamen kaldırmak istemiyorsunuzdur, sadece içindeki belirli alt seçenekleri gizlemek istersiniz. Bunun için remove_submenu_page() fonksiyonunu kullanırsınız. İlk parametre üst menünün slug’u, ikinci parametre ise alt menünün slug’udur.
Örneğin “Görünüm” menüsünü tutup sadece Tema Düzenleyiciyi gizlemek istiyorsanız:
function sysadmin_remove_submenu_items() {
// Tema özelleştirici dışındakileri kaldır
remove_submenu_page( 'themes.php', 'theme-editor.php' );
remove_submenu_page( 'themes.php', 'theme-install.php' );
// Eklenti düzenleyicisini kaldır
remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
// Ayarlar altındaki gizlilik sayfasını kaldır
remove_submenu_page( 'options-general.php', 'options-privacy.php' );
}
add_action( 'admin_menu', 'sysadmin_remove_submenu_items' );
Tema düzenleyicisini ve eklenti düzenleyicisini kapatmak güvenlik açısından son derece önemlidir. PHP dosyalarına doğrudan müdahale edilmesi, hem kötü niyetli kullanıcılar hem de dikkatsiz yöneticiler için ciddi risk oluşturur.
Rol Bazlı Kapsamlı Menü Temizliği
Gerçek dünya senaryolarında genellikle farklı rollere farklı menü yapıları uygulamak gerekir. Bir e-ticaret sitesinde şu rollere sahip olabilirsiniz: mağaza yöneticisi, içerik editörü, müşteri hizmetleri. Her birinin göreceği panel farklı olmalıdır.
Aşağıdaki örnek, editör rolü için kapsamlı bir menü temizliği yapar:
function sysadmin_editor_menu_cleanup() {
// Sadece editör rolüne uygula
if ( ! current_user_can( 'editor' ) ) {
return;
}
// Ana menü öğelerini kaldır
remove_menu_page( 'tools.php' );
remove_menu_page( 'plugins.php' );
remove_menu_page( 'themes.php' );
remove_menu_page( 'users.php' );
remove_menu_page( 'options-general.php' );
remove_menu_page( 'edit-comments.php' );
// Görünüm menüsünü ekleyip sadece widget'ları bırak
// (Görünüm menüsünü tamamen kaldırmak yerine)
remove_submenu_page( 'themes.php', 'theme-editor.php' );
remove_submenu_page( 'themes.php', 'themes.php' );
remove_submenu_page( 'themes.php', 'theme-install.php' );
}
add_action( 'admin_menu', 'sysadmin_editor_menu_cleanup', 999 );
Hook’a 999 önceliği vermek önemlidir. Bazı eklentiler admin_menu hook’unu geç çalıştırır ve siz daha önce kaldırdığınız bir menüyü tekrar ekleyebilirler. Yüksek öncelik numarası, kodunuzun diğer hook’lardan sonra çalışmasını sağlar.
WooCommerce Menüsünü Düzenleme
WooCommerce kullanan sitelerde menü daha da karmaşık bir hal alır. Raporlar, ayarlar, uzantılar gibi bölümler çoğu kullanıcı için anlamsızdır. Müşteri hizmetleri ekibinin sadece siparişlere bakması gerekiyorsa, diğer her şeyi gizleyebilirsiniz:
function sysadmin_woocommerce_menu_cleanup() {
// Müşteri hizmetleri rolü için WooCommerce menüsünü düzenle
if ( current_user_can( 'administrator' ) ) {
return; // Adminlere dokunma
}
// WooCommerce alt menülerini kaldır
remove_submenu_page( 'woocommerce', 'wc-reports' );
remove_submenu_page( 'woocommerce', 'wc-settings' );
remove_submenu_page( 'woocommerce', 'wc-status' );
remove_submenu_page( 'woocommerce', 'wc-addons' );
// Ürün kategorileri ve etiketlerini kaldır (sadece ürünleri bırak)
remove_submenu_page( 'edit.php?post_type=product', 'edit-tags.php?taxonomy=product_cat&post_type=product' );
remove_submenu_page( 'edit.php?post_type=product', 'edit-tags.php?taxonomy=product_tag&post_type=product' );
remove_submenu_page( 'edit.php?post_type=product', 'edit-tags.php?taxonomy=product_shipping_class&post_type=product' );
// WooCommerce raporlarını gizle
remove_menu_page( 'wc-reports' );
}
add_action( 'admin_menu', 'sysadmin_woocommerce_menu_cleanup', 999 );
Dashboard Widget’larını da Temizleme
Menü temizliğinin yanı sıra, dashboard (gösterge paneli) üzerindeki gereksiz widget’ları da kaldırmak isteyebilirsiniz. Özellikle müşteriye teslim edilen sitelerde “WordPress Haberleri” veya çeşitli eklentilerin eklediği widget’lar son derece dağıtıcı olabilir.
function sysadmin_remove_dashboard_widgets() {
// WordPress varsayılan widget'larını kaldır
remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );
remove_meta_box( 'dashboard_secondary', 'dashboard', 'side' );
// WooCommerce dashboard widget'larını kaldır
remove_meta_box( 'woocommerce_dashboard_status', 'dashboard', 'normal' );
remove_meta_box( 'woocommerce_dashboard_recent_reviews', 'dashboard', 'normal' );
// Yoast SEO widget'ını kaldır
remove_meta_box( 'wpseo-dashboard-overview', 'dashboard', 'normal' );
}
add_action( 'wp_dashboard_setup', 'sysadmin_remove_dashboard_widgets' );
Hangi widget’ların hangi ID ile tanımlandığını bulmak için tarayıcı geliştirici araçlarını kullanabilirsiniz. Dashboard’da sayfayı inspect ettiğinizde her widget’ın bir id attribute’u olduğunu göreceksiniz.
Menü Öğelerinin Slug’larını Tespit Etme
Kaldırmak istediğiniz menünün slug’unu bilmiyorsanız, aşağıdaki geçici kodu functions.php‘ye ekleyip admin panelini açın. Bu kod size tüm menü öğelerini ve slug’larını konsola veya sayfaya yazdırır:
function sysadmin_print_menu_slugs() {
// Sadece adminlere göster ve sadece debug modunda kullan
if ( ! current_user_can( 'administrator' ) ) {
return;
}
global $menu, $submenu;
echo '<div style="background:#fff;padding:20px;margin:20px;border:2px solid red;z-index:9999;position:relative;">';
echo '<h2>Ana Menü Slug'ları:</h2><pre>';
foreach ( $menu as $item ) {
if ( ! empty( $item[2] ) ) {
echo esc_html( $item[0] ) . ' => ' . esc_html( $item[2] ) . "n";
}
}
echo '</pre>';
echo '<h2>Alt Menü Slug'ları:</h2><pre>';
foreach ( $submenu as $parent => $items ) {
foreach ( $items as $item ) {
echo esc_html( $parent ) . ' => ' . esc_html( $item[2] ) . "n";
}
}
echo '</pre></div>';
}
add_action( 'admin_notices', 'sysadmin_print_menu_slugs' );
Bu kodu kullandıktan sonra mutlaka kaldırın! Sitenizin admin arayüzüne ekstra yük bindirir ve potansiyel güvenlik bilgisi sızdırır.
Gerçek Dünya Senaryosu: Çok Kullanıcılı Ajans Yapısı
Bir dijital ajans için WordPress kurulumu yapıyorsunuz diyelim. Ekibinizde şu roller var:
- Ajans yöneticileri (administrator)
- İçerik editörleri (editor)
- SEO uzmanları (özel rol: seo_specialist)
- E-ticaret yöneticisi (shop_manager – WooCommerce)
Bu yapı için şöyle kapsamlı bir çözüm yazabilirsiniz:
function sysadmin_role_based_menu_control() {
$user = wp_get_current_user();
// Admin'e dokunma
if ( in_array( 'administrator', $user->roles ) ) {
return;
}
// Editor rolü için menü temizliği
if ( in_array( 'editor', $user->roles ) ) {
remove_menu_page( 'tools.php' );
remove_menu_page( 'plugins.php' );
remove_menu_page( 'users.php' );
remove_menu_page( 'options-general.php' );
remove_submenu_page( 'themes.php', 'theme-editor.php' );
remove_submenu_page( 'themes.php', 'theme-install.php' );
remove_submenu_page( 'themes.php', 'themes.php' );
}
// SEO uzmanı rolü için menü temizliği
if ( in_array( 'seo_specialist', $user->roles ) ) {
remove_menu_page( 'tools.php' );
remove_menu_page( 'plugins.php' );
remove_menu_page( 'users.php' );
remove_menu_page( 'options-general.php' );
remove_menu_page( 'themes.php' );
remove_menu_page( 'upload.php' );
// SEO uzmanı sadece yazılar, sayfalar ve SEO ayarlarına erişebilir
}
// WooCommerce shop_manager için menü temizliği
if ( in_array( 'shop_manager', $user->roles ) ) {
remove_menu_page( 'tools.php' );
remove_menu_page( 'plugins.php' );
remove_menu_page( 'themes.php' );
remove_menu_page( 'options-general.php' );
remove_submenu_page( 'woocommerce', 'wc-addons' );
// Ürünler, siparişler ve müşteriler erişilebilir kalır
}
}
add_action( 'admin_menu', 'sysadmin_role_based_menu_control', 999 );
Önemli Uyarılar ve Dikkat Edilmesi Gerekenler
remove_menu_page() fonksiyonunun sadece görsel bir gizleme yaptığını unutmayın. Eğer bir kullanıcı ilgili sayfanın URL’ini direkt tarayıcıya girerse, yetkileri varsa o sayfaya yine de erişebilir. Bu nedenle menü gizleme, asla tek başına bir güvenlik katmanı olarak değerlendirilmemelidir.
Gerçek güvenlik için yapmanız gerekenler:
- Rol ve yetenek (capability) yönetimini doğru yapılandırın
MembersveyaUser Role Editorgibi eklentilerle rolleri detaylı yönetin- Hassas sayfalara ek erişim kontrolü ekleyin
- WordPress’in
current_user_can()fonksiyonunu kullanarak sayfa içi kontroller yapın
Ayrıca bir eklenti kaldırmak istediğiniz menüyü admin_menu hook’undan sonra ekliyorsa, yüksek öncelik numarası kullanmanız gerekebilir. Bazı durumlarda eklentiler kendi hook’larını kullandığından menüyü farklı bir yöntemle kaldırmanız gerekebilir. Bu durumda eklentinin dokümantasyonunu kontrol etmenizi öneririm.
Bir diğer önemli nokta: CSS ile menü öğelerini gizlemeye çalışmayın. Bazı kaynaklar #adminmenu li { display:none; } gibi CSS çözümleri önerir, bu kesinlikle yanlış bir yaklaşımdır. Hem kırılgan hem de güvensizdir.
Değişiklikleri Test Etme
Yazdığınız kodu test ederken adminle giriş yapmak yerine, farklı bir tarayıcı oturumu veya gizli pencere açıp test kullanıcısıyla giriş yapın. Kendi admin hesabınızla kodunuzu test etmek, current_user_can('administrator') kontrollerinizi atlayacağından yanıltıcı sonuçlar verebilir.
Test sürecinde şunu öneririm:
- Her rol için ayrı test kullanıcısı oluşturun
- Değişiklik öncesi ve sonrası ekran görüntüsü alın
- Staging ortamında deneyin, production’a direkt uygulamayın
WP_DEBUGmodunu açık tutun, olası hataları erken yakalayın
Sonuç
Admin paneli menüsünü düzenlemek, WordPress site yönetiminin en pratik ve etkili adımlarından biridir. Birkaç satır functions.php kodu ile hem kullanıcı deneyimini dramatik biçimde iyileştirebilir hem de sistemin güvenliğine katkı sağlayabilirsiniz. Özellikle müşteri projelerinde ve çok kullanıcılı yapılarda bu adım, sizi ileride onlarca destek talebinden kurtarır.
Başlangıç olarak şunu öneririm: Sitenizin mevcut kullanıcı rollerini listeleyin, her rolün gerçekte neye ihtiyaç duyduğunu düşünün ve minimum yetki prensibini uygulayın. Gereksiz her menü öğesi, potansiyel bir sorun kaynağıdır. Temiz bir panel, hem sizin hem de kullanıcılarınızın işini kolaylaştırır. Ve unutmayın, bu kodları her zaman çocuk temada tutun ki WordPress veya tema güncellemelerinde emekleriniz boşa gitmesin.
