Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save holymong/6747e622b186dbc78459ce1b26c6bf5e to your computer and use it in GitHub Desktop.
Save holymong/6747e622b186dbc78459ce1b26c6bf5e to your computer and use it in GitHub Desktop.
WooCommerce TC Kimlik ve Vergi No Kurumsal Fatura
* Ödeme ekranına geldiğinde 2 tane checkbox olacak. Biri "TC Kimlik No" opsiyonel diğeri "Kurumsal Fautra" opsiyonel.
* Müşteri bu alanlara 10 haneden az bir T.C. yada Vergi No yazarsa hata verecek.
* Kurumsal Fatura Checkbox'ı işaretlenirse Vergi Dairesi ve Vergi No alanı belirecek.
* TC Kimlik No Checkbox'ı işaretlenirse sadece TC Kimlik No alanı belirecek.
* Soyad şirket ünvanı girişinin doğru çalışabilmesi için gerekli değil opsiyonel olarak ayarlandı.
* Kurumsal Fatura seçildiğinde Ad Soyad ve Şirket Ünvanı billing_first_name alanında birleştirip tek bir Input olarak bıraklılmış
billing_last_name ve billing_company gizlenmiştir. TC Kimlik No seçildiğinde yada hiçbir şey seçilmediğinde Ad ve Soyad
iki farklı input olarak duruyor. billing_first_name,billing_last_name
* Kurumsal Fatura seçildiğinde en alt kısımda "Gönderi adresi" checkbox'ı aktif oluyor. TC Kimlik No seçildiğinde yada hiç seçim
yapılmadığında gizleniyor.
* Checkboxlar aynı anda seçilememesi için ayarlama yapıldı birini seçince diğeri uncheck oluyor.
* Eğer iki Checkboxdan biri işaretlenmediyse billing_tc_kimlik_no alanına default olarak 11111111111 yazılacak.
* Checkboxlardan biri seçildiğinde default yazılan 11111111111 kaldırılıyor.
* Checkboxlar işaretlendiğinde doldurulacak alanların isimleri değişiyor. Ör.(Kurumsal Fatura seçiliyken "Ad Soyad" yerine
"Şirket Ünvanı" yazılıyor ve Input alanı 100% width oluyor.)
* BizimHesap.com WooCommerce entegrasyonu Vergi / TC Kimlik No, Vergi Dairesi ve Şirket Adı veya Ad Soyad bilgilerini otomatik
sisteme çekebiliyor. (billing_vergi_dairesi ve billing_tc_kimlik_no olarak define ettiğimiz için)
* Not: Sayfanın en altındaki sipariş notları kısmı kaldırılmıştır. İhtiyaç duyan aktif edebilir. CSS ile düzenlemek gerekiyor.
*Son olarak harslannet hocama teşekkür ederim paylaştığı kodlar için orjinal kodlar için bu kaynaktan da yararlanabilirsiniz;
https://gist.github.com/harslannet/0b6461e3b916d732689bbe4cc3447269
* Ek olarak aşağıdaki CSS kodunu Custom CSS kısmından eklemenizi tavsiye ederim, hatta gerekli diyebilirim.
//GÜNCELLEME
*Şehir isimlerinin TR34 gibi gözükmesi giderildi.
* Telefon nuamrası input alanı düzenlendi. Sadece rakam yazılabiliyor 10 haneden fazla yazılamıyor 10 haneden az yazılır ise
hata mesajı gösteriliyor. Telefon numarası başına 0 olmadan "5551112233" şekilde alınacak. Entegrasyonlarda sorun yaşanmaması için.
*Soyisim yazmmanın zorunlu olmaması bazı müşterilerin soyisimlerini yazmamasına sebebiyet veriyordu ve kargo konusunda sorun yaşanıyordu
Soyisim tekrar zorunlu hale getirildi. Soyisim zorunlu iken Kurumsal fatura seçeneğildiğinde hata vermesi Checkbox işaretlendiğinde
Soyisim kısmına value olarak "." yazılacak şekilde düzeltildi. Henüz daha iyi bir çözüm bulamadım.
En temiz çözüm Soyad alanını da kaldırıp İsim Soyisim bilgisini tek input ile almak.
*Vergi Dairesi veya TC / Vergi NO alanı dolu olduğunda E-Posta şablonunda adres kısmının üstüne eklenecek şekilde düzenlendi.
Artık maillerde de yazılan bu bilgiler iletiliyor.
*WPML kullanan sitelerde input başlıklarının jQuery ile değişimi sorun yaratabiliyor.
*Sipariş notları için CSS kodu eklendi. İsteyenler aşağıdakı CSS kodunu ekleyerek ve unset'i kaldırarak kullanabilir.
Function Silinecek: unset($fields['order']['order_comments']);
CSS Eklenecek: #order_comments_field{display: inline-block;width: 100%;}
*Henüz hesabım sekmesinde vergi dairesi vergi no gibi alanları editleyebilecek bir kod yazılmadı*
*Henüz admin sipariş sekmesinde vergi dairesi vergi no gibi alanları editleyebilecek bir kod yazılmadı*
//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;}
#billing_country{display: none;}
//CSS Sonu
<?php
<?php
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_address_2']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_company']);
unset($fields['order']['order_comments']);
$fields['billing']['billing_country']['default'] = 'TR';
$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';
$fields['billing']['billing_email']['placeholder'] = 'E-Posta kargo takibi için gerekli';
$fields['billing']['billing_phone']['placeholder'] = 'Başında "0" olmadan Ör. "5551112233"';
$fields['billing']['billing_phone']['custom_attributes'] = array("maxlength" => "10" );
unset($fields['shipping']['shipping_address_2']);
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';
$fields['shipping']['shipping_phone']['placeholder'] = 'Başında "0" olmadan Ör. "5301112233"';
$fields['shipping']['shipping_phone']['maxlength'] = 10;
$fields['shipping']['shipping_email']['placeholder'] = 'Kargo bilgileri E-Posta adresinize gönderilecek';
return $fields;
}
add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');
add_action('wp_footer', 'format_checkout_billing_phone');
function format_checkout_billing_phone() {
if ( is_checkout() && ! is_wc_endpoint_url() ) :
?>
<script type="text/javascript">
jQuery( function($){
$('#billing_phone').on( 'input focusout', function() {
var p = $(this).val();
p = p.replace(/[^0-9]/g, '');
$(this).val(p);
});
});
</script>
<?php
endif;
}
add_action( 'woocommerce_checkout_process', 'holymong_checkout_fields_custom_validation' );
function holymong_checkout_fields_custom_validation() {
if ( isset( $_POST['billing_phone'] ) && ! empty( $_POST['billing_phone'] ) ) {
if ( strlen( $_POST['billing_phone'] ) < 10 ) {
wc_add_notice( 'Lütfen telefon numaranızı başında "0" olmadan ve boşluk bırakmadan 10 haneli olarak giriniz. Ör. "5551112233"', 'error' );
}
}
}
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)
{
if (strlen($tc) < 10) {
return false;
}
if ($tc[0] == '0') {
return false;
}
return true;
}
// TC Kimlik Noyu Doğrula
add_action('woocommerce_checkout_process', 'tc_numara_dogrula');
function tc_numara_dogrula()
{
$tcno = $_POST['billing_tc_kimlik_no'];
if (!empty($tcno)) {
if (!is_numeric($tcno) && !isset($_POST['checkbox_tckno'])) {
wc_add_notice(__('Lütfen Vergi Numaranızı yada TC Kimlik Numaranızı kontrol edin.'), 'error');
} else if (!empty($tcno) && !isset($_POST['checkbox_tckno'])) {
if (!isTcKimlik($tcno))
wc_add_notice(__('Lütfen Vergi Numaranızı yada TC Kimlik Numaranızı kontrol edin.'), 'error');
}
}
}
//E-Mail Şablonlarında vergi no ve vergi dairesi gösterimi için.
add_filter('woocommerce_email_order_meta_keys', 'holymong_vergi_numaralari_email_bildirim');
function holymong_vergi_numaralari_email_bildirim( $keys ) {
$keys['Vergi / TC Kimlik No:'] = '_billing_tc_kimlik_no';
$keys['Vergi Dairesi'] = '_billing_vergi_dairesi';
return $keys;
}
//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('#payment_method_paytrcheckout').hide()
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('#billing_last_name').attr("value", ".")
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('#billing_last_name').attr("value", "")
}
});
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_last_name_field').show()
jQuery('#billing_last_name_field').attr("class", "form-row form-row-last validate-required")
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
}
@holymong
Copy link
Author

"TC Kimlik No (isteğe bağlı)" sekmesine tıklayarak soyada . ekledim daha sonra tekrar "Kurumsal Fatura (isteğe bağlı)" geçerek siparişi onayla dediğimde bu kez yanlızca Lütfen "Doğru Bir Vergi No Girin." hatası almaktayım.

Anladığım kadarıyla Kurumsal Fatura kısmında Şahıs şirketi olması dolayısıyla 10 haneli vergi no yerine 11 haneli TC kimlik no giriliyor. Kurumsal Fatura seçildiğinde 10 haneli olarak vergi numarası doğrulaması yapılıyor. Kurumsal faturada TC ile sipariş oluştururken bu hata alınıyor. Konu hakkında bir çözüm bulabilir miyiz bakıcam. Geçici çözüm olarak TC ve Vergi No doğrulama kısmı kaldırılabilir. bu sefer yanlış bir numara girilse bile siparişi onaylar.

@holymong
Copy link
Author

Sorunu yaşayan arkadaşlar aşağıdaki kod satırını silerek geçici olarak çözüm bulabilir. Bir revizeyle düzeltebilir miyiz bakıcam.

// 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');
}
}

@gezmenadam
Copy link

gezmenadam commented Dec 22, 2020

hocam bilgiler için tşk. ilgiyle takip ediyoruz başlığı. :) bu arada sitenizde küçük bir kelime hatası gördüm, gözünüzden kaçıştır diye yazayım dedim. bu sayfada başlık hatalı. kolay gelsin, iyi çalışmalar.

https://www.smartbee.com.tr/siparis-takibi/

@nuwii
Copy link

nuwii commented Dec 23, 2020

Hocam tekrar merhabalar.
Problemi anladım.
Size de anlatayım belki kodu geliştirmenizde bir faydam olur.
Öncelikle soyad girme zorunluluğu aynen devam etmekte.
Vergi numarasındaki problem de şahıs firmalarının T.C. kimlik no girebilme durumundan kaynaklı.
10 haneli vergi numarası girdiğimizde problem yaşanmıyor. Fakat T.C. kimlik numarası girdiğimizde problem yaşanıyor.
Yani vergi numarası girdiğimiz doğrulama fonksiyonuna bir şekilde T.C. kimlik numarası da girebilme özelliği eklenmeli.
Saygılarımla.
İyi çalışalar.

@holymong
Copy link
Author

Hocam tekrar merhabalar.
Problemi anladım.
Size de anlatayım belki kodu geliştirmenizde bir faydam olur.
Öncelikle soyad girme zorunluluğu aynen devam etmekte.
Vergi numarasındaki problem de şahıs firmalarının T.C. kimlik no girebilme durumundan kaynaklı.
10 haneli vergi numarası girdiğimizde problem yaşanmıyor. Fakat T.C. kimlik numarası girdiğimizde problem yaşanıyor.
Yani vergi numarası girdiğimiz doğrulama fonksiyonuna bir şekilde T.C. kimlik numarası da girebilme özelliği eklenmeli.
Saygılarımla.
İyi çalışalar.

Sorunları bende fark ettim. Düzeltme olarak soyad alanı zorunlu değil opsiyonel olarak ayarladım. Vergi No ve TC Kimlik no doğrulaması tek bir input ile aynı anda yapılamayacağına karar verdim. 2 farklı girdi olarak almak gerekiyor bunun doğrulamasını fonksiyonla yapabilmek için. Fakat 2 girdi almak hem müşterinin kafasını karıştırabilir hemde muhasebe programları otomatik bu bilgiyi çekemeyecek hale gelebilir. Dolayısıyla güncellediğim kodda TC ve Vergi No doğrulamasını kaldırdım sadece 10 haneden az bir sayı yazılırsa yada checkbox seçilmiş ama alan doldurulmamışsa hata veriyor. Yardımlarınız için size de teşekkürler farkında olmadığımız bir sorunu çözmüş olduk.

@gezmenadam
Copy link

şu an yayındaki en güncel hali mi? bu şekilde alıp kullanabiliriz sanırım değil mi?

@holymong
Copy link
Author

şu an yayındaki en güncel hali mi? bu şekilde alıp kullanabiliriz sanırım değil mi?

Evet şuan ki en güncel hali

@nuwii
Copy link

nuwii commented Dec 23, 2020

Hocam ne demek.
Biz teşekkür ederiz.
Ellerinize sağlık.
Artık rüyalarınıza girecek sanırım ama :) iki sorundan daha bahsetmeliyim.
Birinci sorunumuz: 3 seçenekte de müşteri açıklama satırı "unset" edilmiş. Ne yaptıysam getiremedim. Burada yok edildiği gibi admin panelinde de yok edilmiş.
İkinci sorunumuz ise: "Farklı adrese gönderilsin mi? seçeneği"
Burada İç içe farklı sorunlar barınıyor.
Birincisi "farklı adrese gönderilsin mi" seçeneği kurumsal seçeneğinde var. Fakat bireysel seçeneğinde ya da default seçenekte yok. Ben jqueryler arasındaki hide() metotlarını show() metoduna çevirerek aktif ettim. Bu kez de farklı adrese gidecekler için telefon ve mail bilgisi görünmez halde geliyor.
İkincisi kurumsal seçeneği içerisindeki farklı adrese gönderilsine tıkladığımızda aşağıda yine telefon ve mail bilgisi olmadığı gibi ad soyad seçeneği çıkıyor.

Çok sorunla kapınıza geldim.
Şimdiden teşekkürler.
Yorduysam affola :)

@nuwii
Copy link

nuwii commented Dec 23, 2020

Hocam bir sorun daha buldum.
Kodlar arasında arasam da bir türlü bulamadım.
İlginç bir sorun.
Girilen şehir bilgisi plaka no olarak kayıt oluyor ve faturada gösteriliyor.
Yani şehir olarak Ankara'yı seçen birisinin faturasında TR06 yazıyor.
Woocommerce'in default halinde bu sorun olmuyordu.
Açıkcası neden olduğu hakkında da bir fikrim yok.
Umarım son sorun olur.
Sizi de yorduk.
İyi çalışmalar.

@nuwii
Copy link

nuwii commented Dec 24, 2020

Hocam yukarıda söylediğim problemleri aşağıda paylaştığım kodlarda çözdüm.
İki şeyi çözüme kavuşturamadım. Onları da umarım siz çözer ve paylaşırsınız.
1.si verilen şehir bilgisinin admin paneli ve faturada plaka bilgisine dönüşmesi;
2.si tc ve vergi numarası bilgisinin admin panelindeki sipariş ekle bölümünde pasif olmasının önüne geçemedim. Oradan da bir girdi yapılabilmesi gerekir diye düşünüyorum.
Bu iki sorun da çözülürse harika bir şey çıkmış olacak.

//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_last_name']['required'] = false;
$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)
{
if (strlen($tc) < 10) {
return false;
}
if ($tc[0] == '0') {
return false;
}

return true;

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

function tc_numara_dogrula()
{
$tcno = $_POST['billing_tc_kimlik_no'];
if (!empty($tcno)) {
if (!is_numeric($tcno) && !isset($_POST['checkbox_tckno'])) {
wc_add_notice(('Lütfen Vergi Numaranızı yada TC Kimlik Numaranızı kontrol edin.'), 'error');
} else if (!empty($tcno) && !isset($_POST['checkbox_tckno'])) {
if (!isTcKimlik($tcno))
wc_add_notice(
('Lütfen Vergi Numaranızı yada TC Kimlik Numaranızı kontrol edin.'), '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 '

' . __('Vergi / TC Kimlik No') . ': ' . $tc_kimlik_no = get_post_meta($order->get_id(), '_billing_tc_kimlik_no', true) . '

';
echo '

' . __('Vergi Dairesi') . ': ' . $vergi_dairesi = get_post_meta($order->get_id(), '_billing_vergi_dairesi', true) . '

';
}

//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('#payment_method_paytrcheckout').hide()
	jQuery('#ship-to-different-address').show()
	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').show()
        }

    });
	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').show()
		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>

@nuwii
Copy link

nuwii commented Dec 24, 2020

Saygılarımla.

@nuwii
Copy link

nuwii commented Dec 29, 2020

Hocam tekrar merhabalar.
Rahatsız ediyorum kusuruma bakmayın.
"verilen şehir bilgisinin admin paneli ve faturada plaka bilgisine dönüşmesi" ile
"tc ve vergi numarası bilgisinin admin panelindeki sipariş ekle bölümünde pasif olması" problemlerini bulabildik mi acaba ?
Yardımınıza ihtiyacım var.

@tamwoo
Copy link

tamwoo commented Jan 27, 2021

@nuwii
"verilen şehir bilgisinin admin paneli ve faturada plaka bilgisine dönüşmesi" hatasını kodlarda country kısmını unset yaptığınız için alıyorsunuz muhtemelen. ilgili yeri düzenlerseniz sorun çözülecektir.

@holymong
Copy link
Author

@nuwii @tamwoo @gezmenadam @egebese @lord5521 Güncelleme yapıldı sizde test edebilirseniz sevinirim.

@sahanet
Copy link

sahanet commented Jun 12, 2022

Merhaba,
Bu eklenti/kodu nasıl kullanabilirim?

@gmgurgen
Copy link

gmgurgen commented Aug 4, 2022

@holymong Hocam merhaba, öncelikle elinize sağlık.
Ben görünümde bir kaç sorun yaşadım; İlçe / Şehir ve Telefon / E-posta alanlarında ve kurumsal fatura seçildiğinde vergi no / vergi dairesi alanlarında kaymalar meydana geliyordu ve tablet/mobil görünümünde alanlar üstüste biniyordu, margin-top: - değerli olduğu için.
Gördüğüm kadarı ile alanlar form-row-first ve form-row-last classlarına göre yerleşim yapıyor genel CSS'de.
Class ekle değiştir ile uğraşmadan sizin kodlarınızda;

$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' => 32,
        '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' => 31,
        'clear'     => true
    );
şeklinde sıralamaları değiştirip, CSS kodlarında da aşağıdaki değişiklikleri yaparak sorunu çözdüm. 
    @media only screen and (min-width: 993px) {
.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;clear: none;}
#billing_state_field{width: 48%;float: right;clear: none;}
#billing_phone_field{width: 48%;float: left;clear: none;}
#billing_email_field{width: 48%;float: right; clear: none;}
#checkbox_trigger_field{width: 48%;float: right;}
#checkbox_tckno_field{width: 48%;float: left;}
}
#order_comments_field{display: inline-block;width: 100%;}
#billing_country{display: none;}
Aynı soruna yaşayan başkaları olduysa yardımcı olması dileğiyle.

@holymong
Copy link
Author

holymong commented Aug 4, 2022

@gmgurgen Teşekkürler paylaşım için. Şu kodu bir ara tekrar derleyip plugin haline getirebilsek güzel olacak.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment