WordPress functions.php ile Google Analytics Kodu Ekleme
WordPress sitenize Google Analytics eklemek için onlarca yöntem var, ama sysadmin olarak en temiz ve en kontrol edilebilir yol hangisi diye sorarsanız, cevabım her zaman aynı: functions.php. Plugin kurmak yerine, kodu doğrudan temanızın fonksiyon dosyasına gömmek hem daha hafif bir yapı sağlıyor hem de sitenizin kontrolü tamamen sizde kalıyor.
Bu yazıda Google Analytics 4 (GA4) kodunu WordPress’e functions.php üzerinden nasıl ekleyeceğinizi, bunu yaparken hangi tuzaklardan kaçınmanız gerektiğini ve gerçek dünya senaryolarında nasıl kullanabileceğinizi anlatacağım.
Neden Plugin Yerine functions.php?
Bu soruyu hep alıyorum. “Zaten bir eklenti var, neden uğraşayım?” diye düşünebilirsiniz. Birkaç somut neden sıralayayım:
- Performans: Her eklenti bir yük. Tek bir kod bloğu için eklenti kurmak, arabanıza sadece çaydanlık taşımak için bagaj taktırmak gibi bir şey.
- Güvenlik: Az eklenti, az saldırı yüzeyi. Bu noktada tartışma yok.
- Kontrol: Kod sizin elinizde. İstediğiniz zaman değiştirirsiniz, koşullu mantıklar eklersiniz, admin kullanıcılarını hariç tutarsınız.
- Bağımlılık yok: Eklenti güncellemesi sonrası kodun kaybolması, eklentinin terk edilmesi gibi durumlarla uğraşmazsınız.
- Öğrenme: Bu yöntemi bir kez öğrendiğinizde, başka izleme araçları için de aynı mantıkla ilerleyebilirsiniz.
Temel Yapı: wp_head Hook
WordPress’te koda head bölümüne bir şey eklemek istiyorsanız, wp_head action hook’u kullanıyorsunuz. Google Analytics kodunun etiketinin içinde olması gerektiğinden, mantığımız tam burada başlıyor.
// functions.php dosyasına eklenen temel yapı
function add_google_analytics() {
?>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
<?php
}
add_action('wp_head', 'add_google_analytics');
Burada G-XXXXXXXXXX kısmını kendi GA4 ölçüm ID’nizle değiştirmeniz gerekiyor. GA4 konsolunda Yönetici > Veri Akışları bölümünden bu ID’yi bulabilirsiniz.
Admin Kullanıcıları Hariç Tutmak
Asıl önemli kısım burası. Eğer siz sitenizi yönetirken sürekli GA’ya veri gidiyorsa, analizleriniz kirlenmiş demektir. Kendi ziyaretlerinizi veri setinden dışarıda tutmanız şart.
function add_google_analytics() {
// Admin kullanıcılar için analytics yükleme
if ( current_user_can('manage_options') ) {
return;
}
?>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
<?php
}
add_action('wp_head', 'add_google_analytics');
current_user_can('manage_options') kontrolü, yönetici yetkisine sahip tüm kullanıcıları devre dışı bırakıyor. Eğer sadece belirli bir kullanıcıyı hariç tutmak isterseniz is_user_logged_in() veya get_current_user_id() kombinasyonunu kullanabilirsiniz.
Geliştirme Ortamında Devre Dışı Bırakma
Staging veya local geliştirme ortamında çalışıyorsanız, bu ortamdan da veri gitmesini istemezsiniz. WP_ENV sabiti veya site URL’si üzerinden kontrol yapabilirsiniz.
function add_google_analytics() {
// Admin kullanıcılar hariç
if ( current_user_can('manage_options') ) {
return;
}
// Geliştirme ortamında çalıştırma
if ( defined('WP_ENV') && WP_ENV === 'development' ) {
return;
}
// Localhost kontrolü
$site_url = get_site_url();
if ( strpos($site_url, 'localhost') !== false || strpos($site_url, '.local') !== false ) {
return;
}
?>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
<?php
}
add_action('wp_head', 'add_google_analytics');
Bu sayede production’da her şey normal çalışırken, local veya staging ortamında GA kodu hiç yüklenmiyor. Temiz bir yapı.
GA ID’sini WordPress Seçeneklerinden Okumak
Sert kodlanmış (hardcoded) ID’ler her zaman sorun çıkarır. Özellikle birden fazla müşteri sitesi yönetiyorsanız, kodu her seferinde açıp değiştirmek yerine, ID’yi WordPress seçenekler tablosunda saklayabilirsiniz.
// functions.php
function add_google_analytics() {
if ( current_user_can('manage_options') ) {
return;
}
$ga_id = get_option('ga_tracking_id');
// ID yoksa yükleme
if ( empty($ga_id) ) {
return;
}
// ID formatını basitçe doğrula
if ( ! preg_match('/^G-[A-Z0-9]+$/', $ga_id) ) {
return;
}
$ga_id = esc_attr($ga_id);
?>
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo $ga_id; ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?php echo $ga_id; ?>');
</script>
<?php
}
add_action('wp_head', 'add_google_analytics');
// Admin panelinde basit bir ayar sayfası
function ga_settings_menu() {
add_options_page(
'Google Analytics Ayarları',
'Google Analytics',
'manage_options',
'ga-settings',
'ga_settings_page'
);
}
add_action('admin_menu', 'ga_settings_menu');
function ga_settings_page() {
if ( isset($_POST['ga_tracking_id']) ) {
$new_id = sanitize_text_field($_POST['ga_tracking_id']);
update_option('ga_tracking_id', $new_id);
echo '<div class="updated"><p>Ayarlar kaydedildi.</p></div>';
}
$current_id = get_option('ga_tracking_id', '');
?>
<div class="wrap">
<h1>Google Analytics Ayarları</h1>
<form method="post">
<?php wp_nonce_field('ga_settings_nonce'); ?>
<table class="form-table">
<tr>
<th>GA4 Ölçüm ID</th>
<td>
<input type="text" name="ga_tracking_id"
value="<?php echo esc_attr($current_id); ?>"
placeholder="G-XXXXXXXXXX" class="regular-text" />
</td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}
Bu yapıyla artık kodu açmanıza gerek yok. WordPress admin panelinden Ayarlar > Google Analytics menüsüne girip ID’yi değiştirebilirsiniz.
wp-config.php ile Sabit Tanımlama Yöntemi
Güvenlik açısından en temiz yöntemlerden biri, GA ID’sini wp-config.php dosyasında sabit olarak tanımlamaktır. Bu dosya genellikle web kökünün dışında tutulur ve sürüm kontrolüne dahil edilmez.
// wp-config.php dosyasına ekleyin
define('GA_TRACKING_ID', 'G-XXXXXXXXXX');
// functions.php dosyasında bu sabiti kullanın
function add_google_analytics() {
if ( current_user_can('manage_options') ) {
return;
}
if ( ! defined('GA_TRACKING_ID') || empty(GA_TRACKING_ID) ) {
return;
}
$ga_id = esc_attr(GA_TRACKING_ID);
?>
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo $ga_id; ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?php echo $ga_id; ?>');
</script>
<?php
}
add_action('wp_head', 'add_google_analytics');
Bu yöntem özellikle ajans olarak çalışıyorsanız ve müşteri sitelerini Git ile yönetiyorsanız çok işe yarıyor. Farklı ortamlar (staging, production) için farklı wp-config.php dosyaları kullanarak, aynı kod tabanıyla farklı GA hesaplarını izleyebilirsiniz.
WooCommerce ile Gelişmiş E-Ticaret Takibi
Eğer bir WooCommerce siteniz varsa, yalnızca sayfa görüntüleme verisi toplamak yeterli olmayacaktır. Satın alma olaylarını, sepet ekleme işlemlerini ve checkout adımlarını da takip etmek isteyeceksiniz.
// Satın alma tamamlandığında GA4'e olay gönder
function ga_woocommerce_purchase_event() {
if ( current_user_can('manage_options') ) {
return;
}
if ( ! is_order_received_page() ) {
return;
}
global $wp;
$order_id = absint( $wp->query_vars['order-received'] );
if ( ! $order_id ) {
return;
}
$order = wc_get_order($order_id);
if ( ! $order || $order->get_meta('_ga_purchase_tracked') ) {
return;
}
$items_data = array();
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
$items_data[] = array(
'item_id' => $product ? $product->get_sku() : $item->get_product_id(),
'item_name' => $item->get_name(),
'quantity' => $item->get_quantity(),
'price' => $item->get_total() / $item->get_quantity(),
);
}
$items_json = json_encode($items_data);
$order_total = $order->get_total();
$currency = get_woocommerce_currency();
$transaction_id = $order->get_order_number();
?>
<script>
gtag('event', 'purchase', {
transaction_id: '<?php echo esc_js($transaction_id); ?>',
value: <?php echo floatval($order_total); ?>,
currency: '<?php echo esc_js($currency); ?>',
items: <?php echo $items_json; ?>
});
</script>
<?php
// Tekrar tetiklenmesin diye işaretle
$order->update_meta_data('_ga_purchase_tracked', true);
$order->save();
}
add_action('wp_footer', 'ga_woocommerce_purchase_event');
Bu kod, sipariş tamamlama sayfasında çalışıyor ve aynı siparişi ikinci kez GA’ya göndermemek için sipariş meta verisine bir işaret bırakıyor. Duplicate veri sorunu bu şekilde çözülüyor.
Child Theme Kullanımı ve functions.php Güvenliği
Buraya kadar yazdığımız her şeyi doğrudan ana temanın functions.php dosyasına eklemek, tema güncellemelerinde tüm kodlarınızı silecektir. Bu yüzden mutlaka child theme kullanın.
// Child theme functions.php - doğru yapı
// wp-content/themes/your-theme-child/functions.php
// Önce parent theme'i yükle (otomatik olabilir, ama açık belirtmek iyi pratik)
add_action('wp_enqueue_scripts', function() {
wp_enqueue_style(
'parent-style',
get_template_directory_uri() . '/style.css'
);
});
// Google Analytics fonksiyonlarını buraya ekle
function add_google_analytics() {
if ( current_user_can('manage_options') ) {
return;
}
if ( ! defined('GA_TRACKING_ID') || empty(GA_TRACKING_ID) ) {
return;
}
$ga_id = esc_attr(GA_TRACKING_ID);
?>
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo $ga_id; ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?php echo $ga_id; ?>');
</script>
<?php
}
add_action('wp_head', 'add_google_analytics', 5);
add_action fonksiyonunun üçüncü parametresi öncelik değeri. Varsayılan 10’dur. Ben burada 5 veriyorum, bu sayede GA kodu diğer head elementlerinden önce yükleniyor.
Hata Ayıklama ve Test
Kodu ekledikten sonra doğru çalışıp çalışmadığını test etmek için birkaç yöntem var:
- Tarayıcı geliştirici araçları: Network sekmesinde
googletagmanager.comisteğini arayın. Görüyorsanız kod yükleniyor. - Google Analytics Gerçek Zamanlı: GA konsolunda Raporlar > Gerçek Zamanlı bölümünde sitenizi ziyaret edin. Kendinizi görmüyorsanız admin hariç tutma çalışıyor demektir.
- GA Debugger Chrome uzantısı: Her tetiklenen eventi detaylı olarak gösterir.
// Debug modu eklemek için (sadece WP_DEBUG aktifken)
function add_google_analytics() {
if ( current_user_can('manage_options') ) {
return;
}
if ( ! defined('GA_TRACKING_ID') ) {
return;
}
$ga_id = esc_attr(GA_TRACKING_ID);
$debug = defined('WP_DEBUG') && WP_DEBUG ? 'true' : 'false';
?>
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo $ga_id; ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?php echo $ga_id; ?>', {
'debug_mode': <?php echo $debug; ?>
});
</script>
<?php
}
add_action('wp_head', 'add_google_analytics', 5);
debug_mode: true ayarıyla birlikte, GA4 DebugView panelinde tüm eventleri anlık olarak izleyebilirsiniz. Production’a almadan önce bu yöntemi mutlaka kullanın.
Sık Yapılan Hatalar
Yıllar içinde destek verdiğim sitelerde tekrar tekrar gördüğüm hatalar şunlar:
- Kodu iki kez eklemek: Hem functions.php’ye hem de bir eklentiye GA kodu ekliyorlar. Çifte sayım yapıyor, veriler anlamsızlaşıyor.
- Admin hariç tutmayı unutmak: Test ederken sitenizi defalarca ziyaret edip veri kirletiyorsunuz.
- Child theme kullanmamak: Tema güncellemesinde her şey gidiyor.
- Hatalı GA ID:
UA-ile başlayan Universal Analytics ID’si artık çalışmıyor. GA4 ID’leriG-ile başlar. - esc_attr kullanmamak: Kullanıcıdan gelen veya veritabanından çekilen her veriyi ekrana basmadan önce escape etmek zorundasınız.
Sonuç
functions.php ile Google Analytics entegrasyonu, WordPress’i gerçekten kontrol eden bir sysadmin veya geliştirici için standart yöntem olmalı. Başlangıçta biraz kod yazmayı gerektiriyor, ama karşılığında elde ettiğiniz şey çok daha temiz bir yapı.
Özetlemek gerekirse en iyi pratikler şunlar:
- Child theme kullanın, aksi halde emekleriniz bir tema güncellemesiyle gidebilir.
- GA ID’sini wp-config.php’de sabit olarak tanımlayın, bu en güvenli ve yönetimi kolay yöntem.
- Admin kullanıcıları her zaman hariç tutun, analitik verileriniz temiz kalsın.
- Localhost ve staging ortamlarını dışlayın, test trafiği production verisini kirletmesin.
- esc_attr ile tüm çıktıları güvenli hale getirin.
Bu yapıyı bir kez kurduğunuzda, herhangi bir ek eklentiye ihtiyaç duymadan GA4 verileriniz düzenli bir şekilde akmaya başlayacak. Üstüne WooCommerce satın alma olaylarını da eklerseniz, tam anlamıyla ihtiyaç duyduğunuz e-ticaret analitiğine kavuşmuş olacaksınız.
