Woocommerce Eklentisiz Fatura Bilgilerine TC Kimlik No Ekleme ve Doğrulama

Geçenlerde böyle bir yapıya ihtiyaç duyup biraz araştırdım,  eklentiler ile de TC Kimlik numarası gibi özel alanlar eklenebiliyor ama eklenti kurmadan çözmeyi hep tercih etmişimdir.

Bu konuda Türkçe bir makale bulamadığım için sizlerde faydalanın istedim ve buraya not düşüyorum.

Aşağıda yazan kodları sadece functions.php dosyamıza ekleyerek çözüme ulaşacağız.

Öncelikle sipariş sayfasında fatura bilgileri kısmında gözükmesi için yeni bir özel alan oluşturuyoruz ;

/** TC Kimlik No Ekle **/

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
$fields['billing']['shipping_tc'] = array(
'label' => __('TC Kimlik No', 'woocommerce'),
'placeholder' => _x('Fatura İçin Gerekli', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);

return $fields;
}

Ardından bu özel alana girilen değerin geçerli bir TC kimlik numarası olduğuna emin olmak için bir TC kimlik numarası doğrulama fonksiyonuna ihtiyacımız var, bunun için Mehmet Fasıl isimli arkadaşımızın Şu URL’de ki hazırladığı kodu kullandım. (Kendisine de teşekkür ederim)

/** TC Doğrula Fonksiyonu **/
function isTcKimlik($tc){
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 = '';
for($i = 0 ; $i < 10 ; $i++){ $all += $tc[$i]; }
if($all % 10 != $tc[10]){ return false; }

return true;
}

Şimdi TC kimlik numarasını doğrulayalım

/**  TC Kimlik Noyu Doğrula **/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
$tcno = $_POST['shipping_tc'];
if(!isTcKimlik($tcno))
wc_add_notice( __( 'Lütfen Doğru Bir TC Kimlik No Girin.' ), 'error' );
}

Yukarıda ki işlemler ile müşteriden geçerli bir TC kimlik numarası almayı başardık, şimdi bu TC kimlik numarasını yönetici sayfasında sipariş detayını görüntülediğimizde fatura bilgileri kısmında görmeliyiz. Bunun için son olarak da aşağıda ki kodu ekliyoruz ve her şey tamam oluyor…

/** Adminin Sipariş Detayında Fatura Bilgilerinde TC No'yu Görebilmesi İçin**/

add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('TC Kimlik No').':</strong> ' . get_post_meta( $order->get_id(), '_shipping_tc', true ) . '</p>';
}

Faydalı olması dileğiyle.

NOT: Bu düzenlemenin daha güncel ve daha kullanışlı halini github’da paylaştım, incelemek isterseniz : https://gist.github.com/harslannet/0b6461e3b916d732689bbe4cc3447269