WooCommerce TC Kimlik & Vergi No / Vergi Dairesi Alanı Yapmak (Eklentisiz)

Ş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-alani-tc-kimlik-no

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

woocommerce-fatura-alani-tc-kimlik-no-2

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

woocommerce-fatura-alani-tc-kimlik-no-3

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-fatura-alani-tc-kimlik-no-4

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

woocommerce-fatura-alani-tc-kimlik-no-5

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.

Ücretsiz Dijital Pazarlama Kaynakları Al!

Eposta bültenime abone ol ve +2.000 kişilik bir topluluğun parçası olarak ücretsiz dijital pazarlama e-kitapları, dersleri gibi kaynaklara eriş!

Abone olduğun için teşekkürler!

Bir şeyler yanlış gitti.

Bunları da beğenebilirsiniz:

Yorum bırakın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top