Wordpress İle Özel Bir Dinamik Google Haritalar Entegrasyonu Nasıl Yapılır?

Wordpress İle Özel Bir Dinamik Google Haritalar Entegrasyonu Nasıl Yapılır?
Wordpress İle Özel Bir Dinamik Google Haritalar Entegrasyonu Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu entegrasyonu başarılı bir şekilde tamamlamak için temel düzeyde PHP, JavaScript ve WordPress API bilgisine sahip olmanız gerekmektedir. İhtiyacınız olan temel araçlar şunlardır:

  • Google Cloud Platform (GCP) hesabı ve aktif bir API anahtarı.
  • Maps JavaScript API ve Geocoding API'nin etkinleştirilmiş olması.
  • WordPress'in güncel bir sürümü (2026 standartları).
  • Bir "Child Theme" (Alt Tema) veya özel bir fonksiyon eklentisi.
Güvenlik Uyarısı: API anahtarınızı asla doğrudan istemci tarafındaki (JavaScript) kodlarda açıkça bırakmayın. Anahtarı kısıtlamak için GCP konsolunda "HTTP Referrer" kısıtlamalarını mutlaka yapılandırın.

Adım 1: Google Maps API Anahtarını Yapılandırma

Google Maps API'sini kullanabilmek için öncelikle kimlik doğrulama sürecini tamamlamalısınız. Google Cloud Console üzerinden "Maps JavaScript API" servisini etkinleştirin ve bir API anahtarı oluşturun. Bu anahtar, haritanın sitenizde görüntülenmesi için gerekli olan yetkiyi sağlar.

Anahtarınızı oluşturduktan sonra, "API Restrictions" kısmından sadece Maps JavaScript API'ye erişim izni verin. Uygulama tarafında ise anahtarın çalınmasını önlemek için aşağıdaki adımları izleyerek anahtarı güvenli bir şekilde kullanıma hazırlayın.

Adım 2: PHP ile Verileri Hazırlama ve Kuyruğa Ekleme

WordPress'te özel bir harita oluştururken, verilerinizi (konum bilgileri, başlıklar, açıklamalar) PHP tarafında hazırlayıp JavaScript'e aktarmak en güvenli yöntemdir. wp_localize_script fonksiyonu, PHP değişkenlerini JavaScript dosyalarına güvenli bir şekilde aktarmamızı sağlar.


// functions.php içerisine eklenecek kod
function ozel_harita_scriptlerini_yukle() {
    wp_enqueue_script('google-maps-api', 'https://maps.googleapis.com/maps/api/js?key=SIZIN_API_ANAHTARINIZ', array(), null, true);
    wp_enqueue_script('harita-js', get_stylesheet_directory_uri() . '/js/harita.js', array('google-maps-api'), '1.0', true);

    $konumlar = array(
        array('lat' => 41.0082, 'lng' => 28.9784, 'baslik' => 'İstanbul Ofis'),
        array('lat' => 39.9334, 'lng' => 32.8597, 'baslik' => 'Ankara Ofis')
    );

    wp_localize_script('harita-js', 'haritaVerileri', array(
        'konumlar' => $konumlar
    ));
}
add_action('wp_enqueue_scripts', 'ozel_harita_scriptlerini_yukle');

Bu kod bloğu, Google Maps kütüphanesini ve kendi yazdığınız harita.js dosyasını sitenize dahil eder. wp_localize_script ile PHP'deki $konumlar dizisini, JavaScript içerisinde haritaVerileri.konumlar olarak kullanabilir hale getiririz.

Adım 3: JavaScript ile Haritayı Başlatma

Haritayı sayfada görüntülemek için bir HTML konteynerine ve bu konteyneri hedefleyen bir JavaScript fonksiyonuna ihtiyacınız vardır. Aşağıdaki kod, haritayı DOM yüklendikten sonra başlatır.


// js/harita.js dosyası
function initMap() {
    const merkez = { lat: 39.9208, lng: 32.8541 };
    const harita = new google.maps.Map(document.getElementById("harita-alani"), {
        zoom: 6,
        center: merkez,
    });

    haritaVerileri.konumlar.forEach(konum => {
        new google.maps.Marker({
            position: { lat: konum.lat, lng: konum.lng },
            map: harita,
            title: konum.baslik
        });
    });
}

window.initMap = initMap;

Bu kod, harita verilerini döngüye alarak her bir konum için bir işaretçi (marker) oluşturur. initMap fonksiyonu, Google Maps API yüklendiğinde otomatik olarak çağrılır.

Adım 4: Veritabanından Dinamik Veri Çekme

Statik diziler yerine WordPress veritabanından (örneğin özel bir yazı tipi olan 'şubeler') veri çekmek, sitenizin dinamik olmasını sağlar. Bunun için WP_Query sınıfını kullanırız.


// functions.php içerisine eklenecek dinamik sorgu
$query = new WP_Query(array('post_type' => 'subeler', 'posts_per_page' => -1));
$dinamik_konumlar = array();

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $dinamik_konumlar[] = array(
            'lat' => get_post_meta(get_the_ID(), 'enlem', true),
            'lng' => get_post_meta(get_the_ID(), 'boylam', true),
            'baslik' => get_the_title()
        );
    }
}
wp_reset_postdata();

Bu yöntemle, WordPress panelinden eklediğiniz her yeni şube, otomatik olarak haritaya bir işaretçi olarak eklenir. get_post_meta fonksiyonu ile özel alanlardan koordinat verilerini çekiyoruz.

Yöntemlerin Karşılaştırılması

Yöntem Avantaj Dezavantaj
Eklenti Kullanımı Hızlı kurulum Performans ve özelleştirme kısıtlı
Özel Kod (API) Tam kontrol, yüksek performans Teknik bilgi ve bakım gerektirir

Adım 5: Güvenlik ve Hata Ayıklama İpuçları

Google Maps entegrasyonunda en sık karşılaşılan hata, API anahtarının kısıtlanmaması veya JavaScript hatalarıdır. Tarayıcınızın "Console" sekmesini (F12) kullanarak API yükleme hatalarını takip edebilirsiniz. Ayrıca, kullanıcı girdilerini haritaya yansıtırken XSS (Cross-Site Scripting) saldırılarına karşı verileri esc_js veya esc_html fonksiyonları ile temizlemeyi unutmayın.


// Veri temizleme örneği
'baslik' => esc_js(get_the_title())

Bu küçük dokunuş, veritabanından gelen verilerin JavaScript tarafında güvenli bir şekilde işlenmesini sağlar.

Sorumluluk Reddi: Bu rehberde paylaşılan kodlar, genel yazılım pratiklerini temsil eder. Özel projelerinizde oluşabilecek veri kayıpları veya güvenlik açıklarından kullanıcı sorumludur. Üretim ortamına almadan önce mutlaka geliştirme (staging) ortamında test ediniz.

Sıkça Sorulan Sorular

Google Maps API kullanımı ücretli mi?

Google, aylık belirli bir krediye kadar ücretsiz kullanım sunar. Ancak yüksek trafikli sitelerde faturalandırma başlayabilir; GCP konsolundan bütçe uyarısı kurmanız tavsiye edilir.

Harita neden görünmüyor?

Genellikle API anahtarının kısıtlamaları veya JavaScript'in yüklenmemesi kaynaklıdır. Tarayıcı konsolunda "RefererNotAllowedMapError" gibi hatalar alıyorsanız, API anahtarınızın domain kısıtlamalarını kontrol edin.

Marker üzerine tıklandığında bilgi penceresi nasıl eklenir?

google.maps.InfoWindow sınıfını kullanarak, marker'a bir 'click' listener ekleyebilir ve içeriği bu pencerede gösterebilirsiniz.

Mobil cihazlarda harita performansı nasıl artırılır?

Haritayı sadece kullanıcı sayfayı aşağı kaydırdığında veya bir butona bastığında yüklemek (lazy loading) mobil performansı ciddi oranda artırır.

Dinamik verileri nasıl güncel tutarım?

WordPress'in save_post hook'unu kullanarak, her içerik kaydedildiğinde bir JSON dosyası oluşturabilir veya veritabanı sorgularını optimize edebilirsiniz.

Marker Kümeleme (Marker Clustering) ile Performans Optimizasyonu

Harita üzerinde yüzlerce veya binlerce lokasyon göstermeniz gerektiğinde, tarayıcı performansı ciddi şekilde düşebilir ve kullanıcı deneyimi karmaşıklaşabilir. Google Maps Marker Clusterer kütüphanesi, birbirine yakın olan işaretçileri gruplayarak tek bir simge altında toplar. Bu, hem görsel kalabalığı önler hem de DOM üzerindeki yükü azaltır.

Bu özelliği entegre etmek için öncelikle Google'ın resmi js-markerclusterer kütüphanesini projenize dahil etmeniz gerekir. Aşağıdaki örnek, harita başlatma fonksiyonunu nasıl genişleteceğinizi gösterir:

// Marker kümeleme entegrasyonu
function initMap() {
    const map = new google.maps.Map(document.getElementById("map"), {
        zoom: 3,
        center: { lat: 39.9334, lng: 32.8597 },
    });

    const markers = locations.map((loc) => {
        return new google.maps.Marker({
            position: { lat: loc.lat, lng: loc.lng },
            map: map,
        });
    });

    // MarkerClusterer kütüphanesini kullanarak kümeleme
    new markerClusterer.MarkerClusterer({ map, markers });
}

İleri Seviye: Özel Harita Stilleri ve JSON Temaları

Google Maps'in standart görünümü yerine, web sitenizin renk paletine uygun özel bir tasarım uygulamak marka kimliğinizi güçlendirir. Snazzy Maps gibi platformlardan alacağınız JSON stil kodlarını, harita başlatma parametrelerine kolayca ekleyebilirsiniz.

Özel bir stil uygulamak için styles dizisini kullanın:

const mapOptions = {
    zoom: 12,
    center: { lat: 41.0082, lng: 28.9784 },
    styles: [
        {
            "featureType": "water",
            "elementType": "geometry",
            "stylers": [{ "color": "#193341" }]
        },
        {
            "featureType": "landscape",
            "elementType": "geometry",
            "stylers": [{ "color": "#2c5a71" }]
        }
    ]
};

const map = new google.maps.Map(document.getElementById("map"), mapOptions);

Harita Entegrasyonunda Sık Karşılaşılan Hatalar ve Çözümleri

Geliştirme sürecinde karşılaşılan hatalar genellikle API kısıtlamaları veya yanlış veri formatlarından kaynaklanır. Aşağıdaki tablo, en yaygın sorunları ve çözüm yollarını özetlemektedir:

Hata Kodu / Belirti Olası Neden Çözüm
RefererNotAllowedMapError API anahtarı kısıtlamaları Google Cloud Konsolu'ndan HTTP referer kısıtlamalarına alan adınızı ekleyin.
Harita boş gri bir kutu CSS yükseklik sorunu Harita kapsayıcısına (div) mutlaka sabit bir yükseklik (height) verin.
InvalidKeyMapError Geçersiz API anahtarı Faturalandırmanın aktif olduğundan ve anahtarın doğru kopyalandığından emin olun.

Önemli İpucu: Geliştirme aşamasında console.log() yerine tarayıcınızın "Network" sekmesini izleyerek API isteklerinin durum kodlarını (200, 403, 400) kontrol etmeniz, hata kaynağını saniyeler içinde bulmanızı sağlar.

Sonuç

WordPress ile özel bir dinamik Google Haritalar entegrasyonu yapmak, sitenize profesyonel bir dokunuş katar ve kullanıcılarınıza konum tabanlı verileri en etkili şekilde sunmanızı sağlar. Bu rehberde öğrendiğiniz yöntemlerle, eklenti bağımlılığından kurtulup tamamen ihtiyaçlarınıza odaklanan, ölçeklenebilir bir yapı kurabilirsiniz.

Bir sonraki adım olarak, harita üzerinde "Marker Clustering" (İşaretçi Kümeleme) özelliğini ekleyerek, çok sayıda lokasyonun olduğu haritalarda kullanıcı deneyimini daha da iyileştirmeyi deneyebilirsiniz.

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

Sürdürülebilir yaşam ve kişisel verimlilik üzerine odaklanan bir içerik üreticisiyim. Zaman yönetimi ve organizasyonel ipuçları konusunda okuyuculara yol gösteriyorum.

Yorumlar (0)

Yorum Yaz