• 27-09-2024, 15:37:00
    #28
    WooCommerce TC Kimlik (Bireysel Fatura) & Vergi No/Vergi Dairesi (Kurumsal Fatura) Ayarları Nasıl Yapılır?
    Woocommerce panelinde bulunan şahıs şirketi ve kurumsal şirket siparişlerinize Veri girmeye yarar.
    Mustafa Özdemir tarafından yazıldı
    UYARI: AŞAĞIDAKİ AYARLAR YAPILMADAN ÖNCE SİTENİZİN YEDEĞİNİ MUTLAKA ALINIZ. BU İŞLEMLER SONUCUNDA DOĞAN HERHANGİ BİR PROBLEMDEN DOLAYI HİÇBİR ŞEKİLDE TARAFIMIZCA MESULİYET KABUL EDİLMEMEKTEDİR.

    Öncelikle Wordpress admin panelinize giriş yapınız.
    Sonrasında Görünüm > Tema Dosya Düzenleyeci > adımlarına takip ediniz.
    Aşağıdaki kodu functions.php dosyasının en sonuna ekleyiniz ve dosyayı güncelle deyiniz.
    NOT: Bu işlemleri yaparken temanızın child temasını kullanınız. Aksi taktirde temanıza bir güncelleme geldiğinde bu kod silinecektir ve tekrardan bu ayarları yapmanız gerekmektedir.

    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 }
  • 10-04-2025, 01:11:49
    #29
    @PhoenixTR; Hocam emeğinize sağlık. Forumda uzun süre arama yaptım ancak Check out sayfasındaki telefon numarası alanı isteğe bağlı olarak görünüyor. Bununla ilgili birkaç farklı kod denedim fakat hiçbirisi işe yaramadı. Sanırım sorun tema kaynaklı çünkü ödeme sayfası (wc-block-checkout) yapısını kullanıyor. Check out sayfasının kaynak kodlarını incelediğimde ise billing_phone kısmını bulamadım.
    Bu konuda nasıl bir çözüm önerirsiniz? Yardımcı olabilir misiniz?
    ocam emeğinize sağlık. Forumda çok aradım fakat Check out sayfasındaki Telefon numarası kısmı isteğe bağlı olarak görünüyor. Bununla ilgili birden fazla kod denedim işe yaramadı sanırım tema kaynaklı çünkü ödeme sayfası (wc-block-checkout) yapısını kullanıyor . Check out sayfasında kaynak kodlarında incelediğimde billing phone kısmı bulunmuyor. Bu konuda nasıl bir çözüm üretebilirim. Tavsiyeniz var mı acaba?
  • 27-05-2025, 15:59:17
    #30
    muhteşem verimli bi konu olmuş bayadır böyle konular görmüyordum elinize sağlık