E-ticaret sitelerinde yurt dışına satış yaparken en büyük dertlerden biri fiyatlandırmadır. Piyasadaki çoğu “Currency Switcher” (Para Birimi Değiştirici) eklentisi, fiyatı o anki kura göre otomatik çarpar. Bu da “99.90 TL” olan ürünün yurt dışında “2.93 Euro” gibi küsuratlı ve satış psikolojisine uymayan rakamlarla görünmesine neden olur.
Ayrıca bu eklentiler sürekli dış API’lere bağlanarak siteyi yavaşlatır. Bugün sizinle paylaştığım Manuel Kur Yöneticisi eklentisi ise bu sorunu kökten çözüyor. Otomatik çeviri yok, API yok; tamamen sizin belirlediğiniz Sabit Fiyat (Fixed Price) mantığı var.
Bu Eklenti Ne Yapıyor?
Tam Kontrol: Ürün düzenleme sayfasına (Varyasyonlar dahil) her para birimi (TRY, USD, EUR) için özel kutucuklar ekler.
Otomatik Tespit: Müşteri siteye girdiği an IP adresinden ülkesini (GeoIP) bulur.
Akıllı Gösterim:
Türkiye’den girene -> Sizin yazdığınız TL fiyatını,
Avrupa’dan girene -> Sizin yazdığınız Euro fiyatını,
Diğer ülkelerden girene -> Sizin yazdığınız Dolar fiyatını gösterir.
Performans: Cache sorunu yaratmaz, veritabanını şişirmez ve ekstra CSS/JS yükü bindirmez.
Kurulum ve Kullanım:
Bu sistemi kullanmak için karmaşık ayarlara gerek yok. Aşağıdaki kodları bir .php dosyası (örneğin: manuel-kur-yoneticisi.php) olarak kaydedip wp-content/plugins klasörüne atmanız veya .zip yapıp yüklemeniz yeterli.
Önemli Notlar:
Sitenizin ana para birimini Amerikan Doları ($) olarak ayarlayın.
WooCommerce ayarlarından “Varsayılan Müşteri Konumu” seçeneğini “Coğrafi Konum (Geolocate)” yapın.
GeoIP’nin düzgün çalışması için WooCommerce entegrasyon ayarlarından (MaxMind) veritabanını güncellemeyi unutmayın.
İşte Eklenti Kodları:
<?php
/*
Plugin Name: Manuel Kur Yöneticisi (GeoIP - Base USD)
Description: Ana para birimi USD'dir. Ziyaretçi konumuna göre manuel girilen TRY veya EUR fiyatını gösterir.
Version: 4.0
Author: Vedat Aydar
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// -----------------------------------------
// 1. ADMİN: Fiyat Alanlarını Ekleme
// -----------------------------------------
// A) Basit Ürünler İçin (TRY ve EUR ekliyoruz, USD zaten ana kutu)
add_action( 'woocommerce_product_options_pricing', 'mky_basit_urun_alanlari' );
function mky_basit_urun_alanlari() {
echo '<div class="options_group">';
// TRY Alanı
woocommerce_wp_text_input( array(
'id' => '_mky_fiyat_try',
'label' => 'TRY Fiyatı (₺)',
'description' => 'Türkiye ziyaretçileri için sabit TL fiyatı.',
'desc_tip' => true,
'type' => 'text',
'data_type' => 'price'
));
// EUR Alanı
woocommerce_wp_text_input( array(
'id' => '_mky_fiyat_eur',
'label' => 'EUR Fiyatı (€)',
'description' => 'Avrupa ziyaretçileri için sabit Euro fiyatı.',
'desc_tip' => true,
'type' => 'text',
'data_type' => 'price'
));
echo '</div>';
}
// B) Varyasyonlu Ürünler İçin
add_action( 'woocommerce_product_after_variable_attributes', 'mky_varyasyon_alanlari', 10, 3 );
function mky_varyasyon_alanlari( $loop, $variation_data, $variation ) {
echo '<div class="variation_custom_pricing">';
woocommerce_wp_text_input( array(
'id' => '_mky_fiyat_try[' . $loop . ']',
'label' => 'TRY Fiyatı (₺)',
'wrapper_class' => 'form-row form-row-first',
'value' => get_post_meta( $variation->ID, '_mky_fiyat_try', true ),
'type' => 'text',
'data_type' => 'price'
) );
woocommerce_wp_text_input( array(
'id' => '_mky_fiyat_eur[' . $loop . ']',
'label' => 'EUR Fiyatı (€)',
'wrapper_class' => 'form-row form-row-last',
'value' => get_post_meta( $variation->ID, '_mky_fiyat_eur', true ),
'type' => 'text',
'data_type' => 'price'
) );
echo '</div>';
}
// -----------------------------------------
// 2. ADMİN: Verileri Kaydetme
// -----------------------------------------
// A) Basit Ürün Kaydı
add_action( 'woocommerce_process_product_meta', 'mky_basit_urun_kaydet' );
function mky_basit_urun_kaydet( $post_id ) {
$fields = ['_mky_fiyat_try', '_mky_fiyat_eur'];
foreach ( $fields as $field ) {
if ( isset( $_POST[ $field ] ) ) {
$val = wc_clean( $_POST[ $field ] );
// Boşsa sil, doluysa güncelle
empty( $val ) ? delete_post_meta( $post_id, $field ) : update_post_meta( $post_id, $field, wc_format_decimal( $val ) );
}
}
}
// B) Varyasyon Kaydı
add_action( 'woocommerce_save_product_variation', 'mky_varyasyon_kaydet', 10, 2 );
function mky_varyasyon_kaydet( $variation_id, $i ) {
if ( isset( $_POST['_mky_fiyat_try'][ $i ] ) ) {
$try_val = wc_clean( $_POST['_mky_fiyat_try'][ $i ] );
update_post_meta( $variation_id, '_mky_fiyat_try', wc_format_decimal( $try_val ) );
}
if ( isset( $_POST['_mky_fiyat_eur'][ $i ] ) ) {
$eur_val = wc_clean( $_POST['_mky_fiyat_eur'][ $i ] );
update_post_meta( $variation_id, '_mky_fiyat_eur', wc_format_decimal( $eur_val ) );
}
}
// -----------------------------------------
// 3. MANTIK: Müşteri Konumu ve Para Birimi
// -----------------------------------------
function mky_aktif_para_birimi() {
// Admin panelindeysek ve AJAX değilse, varsayılan (USD) kalsın.
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return 'USD';
}
// IP'den Ülke Bul (WooCommerce Yerleşik Servisi)
$location = WC_Geolocation::geolocate_ip();
$country = $location['country'];
// 1. Durum: Türkiye
if ( $country === 'TR' ) {
return 'TRY';
}
// 2. Durum: Euro Bölgesi
$euro_zone = array(
'DE', 'FR', 'IT', 'ES', 'NL', 'BE', 'AT', 'GR', 'PT', 'FI', 'IE', 'LU', 'SI', 'SK', 'EE', 'LV', 'LT', 'CY', 'MT', 'ME', 'XK'
);
if ( in_array( $country, $euro_zone ) ) {
return 'EUR';
}
// 3. Durum: Varsayılan (USD)
return 'USD';
}
// -----------------------------------------
// 4. SİSTEM: Para Birimini Tanımla
// -----------------------------------------
// WooCommerce'in aktif para birimini filtreliyoruz
add_filter( 'woocommerce_currency', 'mky_para_birimini_degistir' );
function mky_para_birimini_degistir( $currency ) {
// Sadece ön yüzde çalışsın
if ( ! is_admin() || defined( 'DOING_AJAX' ) ) {
return mky_aktif_para_birimi();
}
return $currency;
}
// -----------------------------------------
// 5. ÖN YÜZ: Fiyat Değerini Değiştir
// -----------------------------------------
// Tüm fiyat türleri için filtreler
add_filter( 'woocommerce_product_get_price', 'mky_fiyat_degerini_degistir', 10, 2 );
add_filter( 'woocommerce_product_get_regular_price', 'mky_fiyat_degerini_degistir', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'mky_fiyat_degerini_degistir', 10, 2 );
add_filter( 'woocommerce_product_variation_get_regular_price', 'mky_fiyat_degerini_degistir', 10, 2 );
function mky_fiyat_degerini_degistir( $price, $product ) {
if ( ! $product ) return $price;
$kur = mky_aktif_para_birimi();
// Eğer kur USD ise, zaten WooCommerce'in ana kutusundaki fiyat geçerlidir.
// O yüzden bir şey yapmaya gerek yok.
if ( $kur === 'USD' ) {
return $price;
}
// Eğer kur TRY ise
if ( $kur === 'TRY' ) {
$try_fiyat = $product->get_meta( '_mky_fiyat_try' );
// Doluysa bunu döndür, boşsa orijinal (USD) döner
return ! empty( $try_fiyat ) ? $try_fiyat : $price;
}
// Eğer kur EUR ise
if ( $kur === 'EUR' ) {
$eur_fiyat = $product->get_meta( '_mky_fiyat_eur' );
return ! empty( $eur_fiyat ) ? $eur_fiyat : $price;
}
return $price;
}
// -----------------------------------------
// 6. GÖRSEL: Para Birimi Sembolünü Garantiye Al
// -----------------------------------------
add_filter( 'woocommerce_currency_symbol', 'mky_sembolu_zorla', 10, 2 );
function mky_sembolu_zorla( $currency_symbol, $currency ) {
switch( $currency ) {
case 'TRY': return '₺';
case 'EUR': return '€';
case 'USD': return '$';
}
return $currency_symbol;
}
Sonuç: Bu basit eklenti sayesinde, ürününüzü Türkiye’de 1500 TL’ye, Avrupa’da 80 Euro’ya, Amerika’da 90 Dolar’a satabilirsiniz. Kur dalgalanmalarından bağımsız, hedef pazarınıza uygun “psikolojik fiyatlandırma” yapabilirsiniz. Güle güle kullanın!
Kodlar Kodlayana, Kahveler Bana! ☕
Burada paylaştığım içerikler projelerinde işine yaradıysa veya sana zaman kazandırdıysa, bir kahve ısmarlayarak desteğini gösterebilirsin. Bu destek, daha fazla içerik üretmem için motive edici olacaktır.
☕ Bana Bir Kahve Ismarla