Ege Beşe sitesine başarıyla abone oldunuz
Harika! Şimdi Ege Beşe sitesindeki içeriklerin tamamına erişmek için planlara göz atın
Tekrar hoşgeldiniz! Başarıyla giriş yaptınız.
Başarılı! Hesabınız tamamen aktif edildi, artık tüm içeriklere erişebilirsiniz.
Başarılı! Ödeme bilgileriniz güncellendi.
Ödeme bilgilerinizin güncellenmesi başarısız oldu.

WooCommerce TC Kimlik & Vergi No / Vergi Dairesi Alanı Yapmak (Eklentisiz) - 🧍 Bireysel & 💼Kurumsal Fatura

WooCommerce'in bireysel ve kurumsal fatura bilgileri için ödeme ekranında herhangi bir bilgi alanı yok. Bu yüzden bunu kendimiz yapmamız gerekiyor. Bu yazıda eklentisiz bir şekilde WooCommerce TC Kimlik & Vergi No / Vergi Dairesi Alanı Yapmaktan bahsettim.

Ege Beşe
Ege Beşe

Şirketimi kurana kadar hiç bununla ilgili bir araştırma yapmamıştım. İlk faturamı kesmem gerekirken WooCommerce sitelerimde bir problem yaşadığımı gördüm.

Bireysel veya kurumsal fatura için gerekli bilgileri müşterilerimden alamıyordum.

Bireysel müşterilerde ekstra olarak T.C. Kimlik No, kurumsal müşterilerde ise Firma ünvanı, Vergi No ve Vergi Dairesi bilgileri gerekliydi.

WooCommerce'de ise bu özellik yoktu.

Birazcık araştırma yaptım ve Github'da bunun için çok uygun bir kod buldum.

WooCommerce Fatura Alanları Nasıl Çalışıyor?

  • Müşteri sepetteyken ödeme alanına geldiğinde adres gibi bilgileri girdiği alanda bir işaretleme kutusu çıkıyor.
  • Burada "TC Kimlik No" ve "Kurumsal Fatura" yazıyor.
  • Eğer TC Kimlik No seçerse Ad - Soyad ve TC Kimlik No yazabileceği kutular çıkıyor, eğer kurumsal fatura çıkarsa Şirket Ünvanı, Vergi No ve Vergi Dairesi yazacağı alanlar çıkıyor.
  • Kurumsal fatura seçildiğinde Gönderi adresi alanı açılıyor ancak TC Kimlik No seçildiyse bu alan gizleniyor.

WooCommerce Fatura Alanları Nasıl Gözüküyor?

Sipariş Ekranı Görüntüleri

Hiçbir şey seçilmezse bu şekilde gözüküyor:

woocommerce fatura alanları yapmak

TC Kimlik No seçeneği seçilirse bu şekilde gözüküyor:

woocommerce tc kimlik no alanı yapmak

Kurumsal fatura seçilirse bu şekilde gözüküyor:

woocommerce kurumsal fatura alanı yapmak, vergi dairesi, vergi no, şirket ünvanı

Yönetici Sipariş Detayları Görüntüleri

WooCommerce > Siparişler kısmında TC Kimlik No siparişi bu şekilde gözüküyor:

woocommerce tc kimlik no alanı yapımı

WooCommerce > Siparişler kısmında Kurumsal Fatura siparişi bu şekilde gözüküyor:

woocommerce kurumsal fatura alanı yapmak, vergi dairesi, vergi no, şirket ünvanı yapımı

WooCommerce TC Kimlik (Bireysel Fatura) & Vergi No/Vergi Dairesi (Kurumsal Fatura) Nasıl Yapılır?

//WooCommerce Checkout duzenleme
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_company']);
unset($fields['order']['order_comments']);
$fields['billing']['billing_address_1']['label'] = 'Adres';
$fields['billing']['billing_address_1']['placeholder'] = 'Mahalle, Sokak, Bina No, Daire vb.';
$fields['billing']['billing_address_1']['priority'] = '90';	
$fields['billing']['billing_first_name']['placeholder'] = 'Ad';
$fields['billing']['billing_first_name']['label'] = 'Ad';
$fields['billing']['billing_last_name']['placeholder'] = 'Soyad';
$fields['billing']['billing_last_name']['label'] = 'Soyad';
$fields['billing']['billing_city']['label'] = 'İlçe';
$fields['billing']['billing_city']['placeholder'] = 'İlçe';	
unset($fields['shipping']['shipping_address_2']);
unset($fields['shipping']['shipping_country']);
unset($fields['shipping']['shipping_postcode']);
unset($fields['shipping']['shipping_company']);
$fields['shipping']['shipping_address_1']['label'] = 'Adres';
$fields['shipping']['shipping_address_1']['priority'] = '90';	
$fields['shipping']['shipping_city']['label'] = 'İlçe';
$fields['shipping']['shipping_city']['placeholder'] = 'İlçe';
$fields['shipping']['shipping_address_1']['placeholder'] = 'Mahalle, Sokak, Bina No, Daire vb.';
$fields['shipping']['shipping_first_name']['placeholder'] = 'Ad';
$fields['shipping']['shipping_first_name']['label'] = 'Ad';
$fields['shipping']['shipping_last_name']['placeholder'] = 'Soyad';
$fields['shipping']['shipping_last_name']['label'] = 'Soyad';
return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

add_filter( 'woocommerce_enable_order_notes_field', '__return_false', 9999 );

//T.C. No, Vergi No ve Vergi Dairesi Alanlarını Oluştur
add_filter('woocommerce_checkout_fields', 'tc_vergi_icin_new_checkout_field');

function tc_vergi_icin_new_checkout_field($fields)
{
    $fields['billing']['checkbox_tckno'] = array(
        'type'      => 'checkbox',
        'priority'  => 5,
        'label'     => __('TC Kimlik No', 'woocommerce'),
        'class'     => array('form-row-left'),
        'clear'     => true
    );
    $fields['billing']['checkbox_trigger'] = array(
        'type'      => 'checkbox',
        'priority'  => 8,
        'label'     => __('Kurumsal Fatura', 'woocommerce'),
        'class'     => array('form-row-right'),
        'clear'     => true
    );

    $fields['billing']['billing_tc_kimlik_no'] = array(
        'label'     => __('Vergi / TC Kimlik No', 'woocommerce'),
        'placeholder'   => _x('Vergi No', 'placeholder', 'woocommerce'),
        'class'     => array('form-row form-row-last'),
        'required' => true,
        'priority' => 31,
        'clear'     => true
    );
	
    $fields['billing']['billing_vergi_dairesi'] = array(
        'label'     => __('Vergi Dairesi', 'woocommerce'),
        'placeholder'   => _x('Vergi Dairesi', 'placeholder', 'woocommerce'),
        'class'     => array('form-row form-row-first'),
        'required' => true,
        'priority' => 32,
        'clear'     => true
    );
	
    if (!isset($_POST['checkbox_trigger'])) {
	$fields['billing']['billing_tc_kimlik_no']['required'] = false;
        $fields['billing']['billing_vergi_dairesi']['required'] = false;
    } else {
        $fields['billing']['billing_tc_kimlik_no']['required'] = true;        
	$fields['billing']['billing_vergi_dairesi']['required'] = true;
    }
    if (!isset($_POST['checkbox_trigger'])) {
	$fields['billing']['billing_tc_kimlik_no']['default'] = '11111111111';
    } else {
	$fields['billing']['billing_tc_kimlik_no']['default'] = '11111111111';
    }
	
    return $fields;
}
// TC Doğrula Fonksiyonu
function isTcKimlik($tc)
{
    // Array içindeki denemeler tc kriterine uyduğu için hariç tuttuk.
    $exclude = array('11111111110', '22222222220', '33333333330', '44444444440', '55555555550', '66666666660', '7777777770', '88888888880', '99999999990'); //Bunlar aşağıdaki fonksiyonu yanıltan numaralar dilerseniz kaldırabilirsiniz satırı.
    if (in_array($tc, $exclude)) {
        return false;
    }
    if (strlen($tc) < 11) {
        return false;
    }
    if ($tc[0] == '0') {
        return false;
    }
    $plus = ($tc[0] + $tc[2] + $tc[4] + $tc[6] + $tc[8]) * 7;
    $minus = $plus - ($tc[1] + $tc[3] + $tc[5] + $tc[7]);
    $mod = $minus % 10;
    if ($mod != $tc[9]) {
        return false;
    }
    $all = 0;
    for ($i = 0; $i < 10; $i++) {
        $all += $tc[$i];
    }
    if ($all % 10 != $tc[10]) {
        return false;
    }

    return true;
}
// TC Kimlik Noyu Doğrula
add_action('woocommerce_checkout_process', 'tc_numara_dogrula');

function tc_numara_dogrula()
{
    $tcno = $_POST['shipping_tc'];
    if (!empty($tcno)) {
        if (!is_numeric($tcno) && !isset($_POST['checkbox_trigger'])) {
            wc_add_notice(__('T.C alanına lütfen sayısal bir değer girin yada siparişiniz 5.000,00 TL den küçük ise boş bırakın.'), 'error');
        } else if (!empty($tcno) && !isset($_POST['checkbox_trigger'])) {
            if (!isTcKimlik($tcno))
                wc_add_notice(__('Lütfen doğru bir TC kimlik no girin yada siparişiniz 5.000,00 TL den küçük ise boş bırakın.'), 'error');
        }
    }
}
// Vergi No Doğrulama Fonksiyonu
function validateTaxNo($taxNo)
{
    if (strlen($taxNo) == 10) {
        for ($i = 0; $i < 9; $i++) {
            $v[$i + 1] = ($taxNo[$i] + (9 - $i)) % 10;
            $vv[$i + 1] = ($v[$i + 1] * pow(2, (9 - $i))) % 9;
            $vv[$i + 1] = ($v[$i + 1] != 0 && $vv[$i + 1] == 0) ? 9 : $vv[$i + 1];
        }
        $sum = array_sum($vv);
        $sum = ($sum % 10 == 0) ? 0 : (10 - ($sum % 10));
        return ($sum == $taxNo[9]) ? true : false;
    }
    return false;
}
// Vergi Noyu Doğrula
add_action('woocommerce_checkout_process', 'vergi_no_dogrula');

function vergi_no_dogrula()
{
    $tc_kimlik_no = $_POST['billing_tc_kimlik_no'];
    if (isset($_POST['checkbox_trigger'])) {
		if (!validateTaxNo($tc_kimlik_no))
			wc_add_notice(__('Lütfen Doğru Bir Vergi No Girin.'), 'error');
        }
    }


//Adminin Sipariş Detayında Fatura Bilgilerinde TC No ve Vergi Dairesi Görebilmesi İçin
add_action('woocommerce_admin_order_data_after_billing_address', 'vergi_no_dairesi', 10, 1);

function vergi_no_dairesi($order)
{
	echo '<p><strong>' . __('Vergi / TC Kimlik No') . ':</strong> ' . $tc_kimlik_no = get_post_meta($order->get_id(), '_billing_tc_kimlik_no', true) . '</p>';
        echo '<p><strong>' . __('Vergi Dairesi') . ':</strong> ' . $vergi_dairesi = get_post_meta($order->get_id(), '_billing_vergi_dairesi', true) . '</p>';
}

//Koşullara göre alanları göstermek için gerekli javascript kodları

add_action('woocommerce_after_checkout_form', 'kosullu_alan_goster', 6);

function kosullu_alan_goster()
{

    ?>
    <script type="text/javascript">
	jQuery('#ship-to-different-address').hide()
	jQuery('.woocommerce-billing-fields > h3').html('Adres bilgileri');
        jQuery('#billing_tc_kimlik_no').hide();
        jQuery('#billing_vergi_dairesi').hide();
	jQuery('#billing_tc_kimlik_no_field  > label').hide();
        jQuery('#billing_vergi_dairesi_field  > label').hide();
        jQuery("#billing_tc_kimlik_no_field > label").append("<abbr class='required' title='gerekli'>*</abbr>");
        jQuery("#billing_vergi_dairesi_field > label").append("<abbr class='required' title='gerekli'>*</abbr>");
		
        jQuery('input#checkbox_trigger').change(function() {
            if (this.checked) {

		jQuery('.woocommerce-billing-fields > h3').html('Fatura bilgileri');
		jQuery("#checkbox_tckno").prop( "checked", false );
		jQuery('#billing_tc_kimlik_no').show();
                jQuery('#billing_vergi_dairesi').show();
                jQuery('#billing_last_name_field').hide();
                jQuery('#billing_tc_kimlik_no_field  > label').show();				
                jQuery('#billing_vergi_dairesi_field  > label').show();
                jQuery('#billing_tc_kimlik_no_field > label > span').remove();
                jQuery('#billing_vergi_dairesi_field > label > span').remove();
                jQuery('#billing_tc_kimlik_no_field').addClass('validate-required');
                jQuery('#billing_vergi_dairesi_field').addClass('validate-required');
		jQuery('#billing_first_name_field > label').html('Şirket Ünvanı&nbsp;<abbr class="required" title="gerekli">*</abbr>')
		jQuery('#billing_tc_kimlik_no').attr("value", "")
		jQuery('#billing_first_name').attr("placeholder", "Şirket Ünvanı")
		jQuery('#billing_first_name_field').attr("class", "form-row form-row-first validate-required fullwidth_custom")
		jQuery('#ship-to-different-address').show()
		jQuery('#billing_tc_kimlik_no').attr("placeholder", "Vergi No")
		jQuery('#billing_tc_kimlik_no_field').attr("class", "form-row form-row form-row-last ")
		jQuery('#billing_tc_kimlik_no_field > label').html('Vergi No&nbsp;<abbr class="required" title="gerekli">*</abbr>')

            } else {				
		jQuery('.woocommerce-billing-fields > h3').html('Adres bilgileri');
                jQuery('#billing_last_name_field').show();
                jQuery('#billing_vergi_dairesi').hide();
                jQuery('#billing_vergi_dairesi_field > label').hide();
                jQuery('#billing_vergi_dairesi').hide();
                jQuery('#billing_tc_kimlik_no').hide();
                jQuery('#billing_vergi_dairesi_field > label').hide();
                jQuery('#billing_tc_kimlik_no_field  > label').hide();
		jQuery('#billing_first_name_field > label').html('Ad&nbsp;<abbr class="required" title="gerekli">*</abbr>')
		jQuery('#billing_tc_kimlik_no').attr("value", "11111111111")
		jQuery('#billing_first_name').attr("placeholder", "Ad")
		jQuery('#billing_first_name_field').attr("class", "form-row form-row-first validate-required")
		jQuery('#billing_tc_kimlik_no_field > label').html('TC Kimlik No&nbsp;<abbr class="required" title="gerekli">*</abbr>')
		jQuery('#ship-to-different-address').hide()
            }

        });
	jQuery('input#checkbox_tckno').change(function() {
            if (this.checked) {
		jQuery( "#checkbox_trigger" ).prop( "checked", false );
                jQuery('#billing_tc_kimlik_no').show();
                jQuery('#billing_tc_kimlik_no_field  > label').show();
                jQuery('#billing_tc_kimlik_no_field > label > span').remove();
                jQuery('#billing_tc_kimlik_no_field').addClass('validate-required');
		jQuery('#billing_tc_kimlik_no').attr("value", "")
		jQuery('#billing_first_name').attr("placeholder", "Ad")
		jQuery('#billing_tc_kimlik_no').attr("placeholder", "TC Kimlik No")
		jQuery('#billing_tc_kimlik_no_field').attr("class", "form-row form-row form-row-last fullwidth_custom ")
                jQuery('#billing_last_name_field').show()
		jQuery('#billing_first_name_field > label').html('Ad&nbsp;<abbr class="required" title="gerekli">*</abbr>')
                jQuery('#billing_vergi_dairesi').hide();
                jQuery('#billing_vergi_dairesi_field > label').hide();
                jQuery('#billing_vergi_dairesi').hide();
                jQuery('#billing_vergi_dairesi_field > label').hide();
		jQuery('#billing_first_name_field').attr("class", "form-row form-row-first validate-required")
		jQuery('#billing_tc_kimlik_no_field > label').html('TC Kimlik No&nbsp;<abbr class="required" title="gerekli">*</abbr>')
		jQuery('#ship-to-different-address').hide()
		jQuery('.woocommerce-billing-fields > h3').html('Adres bilgileri');

            } else {
                jQuery('#billing_tc_kimlik_no').hide();
                jQuery('#billing_tc_kimlik_no_field  > label').hide();
		jQuery('#billing_tc_kimlik_no').attr("value", "11111111111")
		jQuery('#billing_first_name').attr("placeholder", "Ad")
		jQuery('#billing_tc_kimlik_no').attr("placeholder", "Vergi No")
		jQuery('#billing_tc_kimlik_no_field').attr("class", "form-row form-row form-row-last ")
		jQuery('#billing_first_name_field').attr("class", "form-row form-row-first validate-required")
                jQuery('#billing_last_name_field').show()
		jQuery('#billing_first_name_field > label').html('Ad&nbsp;<abbr class="required" title="gerekli">*</abbr>')
		jQuery('#billing_tc_kimlik_no_field > label').html('Vergi No&nbsp;<abbr class="required" title="gerekli">*</abbr>')
				
            }
        });
    </script>

<?php

}

Bu kodu WordPress temanızın functions.php dosyasının en sonuna eklemeniz gerekli.

Ancak önerim bunu yaparken temanızın child temasını kullanın yoksa bir güncelleme geldiği zaman temanıza eklediğiniz kodlar silinecektir.

Aynı zamanda bu kodu bizimle paylaşan holymong bunun için bir CSS kodu da yazmış.

//CSS Basi
.fullwidth_custom{width: 100% !important;}
#billing_first_name_field{width: 48%;}
#billing_last_name_field{width: 48%;}
#billing_vergi_dairesi_field{width: 48%;float:right;}
#billing_tc_kimlik_no_field{width: 48%;float:left;}
#billing_city_field{width: 48%;float: left;}
#billing_state_field{width: 48%;float: right;margin-top: -92px;}
#billing_phone_field{width: 48%;float: left;}
#billing_email_field{width: 48%;float: right;margin-top: -92px;}
#checkbox_trigger_field{width: 48%;float: right;}
#checkbox_tckno_field{width: 48%;float: left;}
//CSS Sonu

Bu kodu da temanızın child temasının style.css dosyasına ekleyebilirsiniz.

Ya da Görünüm > Özelleştir > Ek CSS kısmına bu kodu yapıştırarak da yapabilirsiniz.

Kaynak: https://gist.github.com/holymong/6747e622b186dbc78459ce1b26c6bf5e

Kapanış

Yine bir yazının sonuna geldik. Aynı kodu kendi sitelerimde ve müşterilerimin sitelerinde kullanıyorum. WooCommerce için en iyi fatura bilgisi çözümü olduğunu düşünüyorum. Eklentisiz, sadece kodlarla yapılan bir çözüm olması daha güzel bir ayrıntı.

Aklınıza takılan herhangi bir şeyi yorumlardan sorabilirsiniz.

WooCommerceWordPress

Ege Beşe

CORAZU ve İçerikly'nin kurucusuyum. 6 yıldır dijital pazarlama ile uğraşıyorum. Kurumsal firmalara çeşitli dijital pazarlama hizmetleri sağlıyorum ve e-ticaret danışmanlığı yapıyorum.