Woocommerce Bireysel & Kurumsal Fatura Alanı Nasıl Eklerim?
3
●150
- 16-04-2025, 23:31:21Selam wpden ulaşın fonksiyon kodu vereyim koşullu bireysel tck kurumsal vd vn soran tckn son numara kontrollü sipariş verilerine yansır
- 17-04-2025, 00:17:17

/** * WooCommerce ülke alanını kaldırır, Türkiye'yi varsayılan ülke yapar ancak adresler sayfasında ve ödeme sayfasında ülke görünmez. Ödeme sayfasında ve sipariş detay sayfasında eğer girilmiş ise firma adı, vergi numarası ve vergi dairesi görünür. Inputlar da sıralanmıştır. City select eklentisi yüklenmelidir. https://tr.wordpress.org/plugins/wc-city-select/ */ // 1. Ödeme sayfasından ülke alanını kaldır add_filter('woocommerce_checkout_fields', 'remove_country_field_completely'); function remove_country_field_completely($fields) { // Fatura adresi için ülke alanını kaldır if (isset($fields['billing']['billing_country'])) { unset($fields['billing']['billing_country']); } // Kargo adresi için ülke alanını kaldır if (isset($fields['shipping']['shipping_country'])) { unset($fields['shipping']['shipping_country']); } return $fields; } // 2. Adres düzenleme sayfasından ülke alanını kaldır add_filter('woocommerce_billing_fields', 'remove_country_from_address_edit', 20, 2); add_filter('woocommerce_shipping_fields', 'remove_country_from_address_edit', 20, 2); function remove_country_from_address_edit($fields, $country) { // Ülke alanını kaldır if (isset($fields['billing_country'])) { unset($fields['billing_country']); } if (isset($fields['shipping_country'])) { unset($fields['shipping_country']); } return $fields; } // 3. Form gönderildiğinde varsayılan ülkeyi Türkiye olarak ayarla add_action('woocommerce_checkout_process', 'set_default_country_on_submit'); function set_default_country_on_submit() { $_POST['billing_country'] = 'TR'; if (isset($_POST['shipping_country'])) { $_POST['shipping_country'] = 'TR'; } } // 4. Siparişlere varsayılan ülke bilgisini ekle add_action('woocommerce_checkout_create_order', 'add_default_country_to_order'); function add_default_country_to_order($order) { $order->set_billing_country('TR'); $order->set_shipping_country('TR'); } // 5. Müşteri hesaplarına varsayılan ülke bilgisini ekle add_filter('woocommerce_customer_get_billing_country', 'set_customer_default_country'); add_filter('woocommerce_customer_get_shipping_country', 'set_customer_default_country'); function set_customer_default_country($country) { return empty($country) ? 'TR' : $country; } /** * WooCommerce'e vergi numarası ve vergi dairesi alanları ekler */ // 1. Ödeme sayfasına vergi alanlarını ekle add_filter('woocommerce_checkout_fields', 'add_tax_fields_to_checkout'); function add_tax_fields_to_checkout($fields) { // Fatura bölümüne vergi numarası alanı ekle $fields['billing']['billing_tax_number'] = array( 'type' => 'text', 'label' => 'Vergi Numarası', 'placeholder' => 'Vergi numaranızı giriniz', 'required' => false, // İsterseniz true yapabilirsiniz 'class' => array('form-row-wide'), 'priority' => 120, 'clear' => true ); // Fatura bölümüne vergi dairesi alanı ekle $fields['billing']['billing_tax_office'] = array( 'type' => 'text', 'label' => 'Vergi Dairesi', 'placeholder' => 'Vergi dairenizi giriniz', 'required' => false, // İsterseniz true yapabilirsiniz 'class' => array('form-row-wide'), 'priority' => 121, 'clear' => true ); return $fields; } // 2. Adresi düzenleme sayfasında da vergi alanlarını göster add_filter('woocommerce_billing_fields', 'add_tax_fields_to_address_edit', 10, 2); function add_tax_fields_to_address_edit($fields, $country) { // Eğer adres düzenleme sayfasında isek if (is_wc_endpoint_url('edit-address')) { // Vergi numarası alanı ekle $fields['billing_tax_number'] = array( 'type' => 'text', 'label' => 'Vergi Numarası', 'placeholder' => 'Vergi numaranızı giriniz', 'required' => false, 'class' => array('form-row-wide'), 'priority' => 120, 'clear' => true ); // Vergi dairesi alanı ekle $fields['billing_tax_office'] = array( 'type' => 'text', 'label' => 'Vergi Dairesi', 'placeholder' => 'Vergi dairenizi giriniz', 'required' => false, 'class' => array('form-row-wide'), 'priority' => 121, 'clear' => true ); } return $fields; } // 3. Vergi alanlarını kaydet add_action('woocommerce_checkout_update_order_meta', 'save_tax_fields'); function save_tax_fields($order_id) { if (!empty($_POST['billing_tax_number'])) { update_post_meta($order_id, '_billing_tax_number', sanitize_text_field($_POST['billing_tax_number'])); } if (!empty($_POST['billing_tax_office'])) { update_post_meta($order_id, '_billing_tax_office', sanitize_text_field($_POST['billing_tax_office'])); } } // 4. Vergi alanlarını admin panelinde sipariş detayında göster add_action('woocommerce_admin_order_data_after_billing_address', 'show_tax_fields_in_admin_order', 10, 1); function show_tax_fields_in_admin_order($order) { $order_id = $order->get_id(); $tax_number = get_post_meta($order_id, '_billing_tax_number', true); $tax_office = get_post_meta($order_id, '_billing_tax_office', true); if (!empty($tax_number)) { echo '<p><strong>Vergi Numarası:</strong> ' . esc_html($tax_number) . '</p>'; } if (!empty($tax_office)) { echo '<p><strong>Vergi Dairesi:</strong> ' . esc_html($tax_office) . '</p>'; } } // 5. Vergi alanlarını e-posta bildirimlerinde göster add_filter('woocommerce_email_order_meta_fields', 'add_tax_fields_to_emails', 10, 3); function add_tax_fields_to_emails($fields, $sent_to_admin, $order) { $order_id = $order->get_id(); $tax_number = get_post_meta($order_id, '_billing_tax_number', true); $tax_office = get_post_meta($order_id, '_billing_tax_office', true); if (!empty($tax_number)) { $fields['billing_tax_number'] = array( 'label' => 'Vergi Numarası', 'value' => $tax_number ); } if (!empty($tax_office)) { $fields['billing_tax_office'] = array( 'label' => 'Vergi Dairesi', 'value' => $tax_office ); } return $fields; } // 6. Vergi alanlarını sipariş detay sayfasında müşteriye göster add_action('woocommerce_order_details_after_customer_details', 'show_tax_fields_in_order_details', 10, 1); function show_tax_fields_in_order_details($order) { $order_id = $order->get_id(); $tax_number = get_post_meta($order_id, '_billing_tax_number', true); $tax_office = get_post_meta($order_id, '_billing_tax_office', true); if (!empty($tax_number) || !empty($tax_office)) { echo '<section class="woocommerce-tax-info">'; echo '<h2>Vergi Bilgileri</h2>'; echo '<table class="woocommerce-table shop_table tax_info">'; if (!empty($tax_number)) { echo '<tr>'; echo '<th>Vergi Numarası:</th>'; echo '<td>' . esc_html($tax_number) . '</td>'; echo '</tr>'; } if (!empty($tax_office)) { echo '<tr>'; echo '<th>Vergi Dairesi:</th>'; echo '<td>' . esc_html($tax_office) . '</td>'; echo '</tr>'; } echo '</table>'; echo '</section>'; } } // 7. Kullanıcı hesabında kaydedilen alanları göster add_filter('woocommerce_my_account_my_address_formatted_address', 'show_tax_fields_in_my_account', 10, 3); function show_tax_fields_in_my_account($fields, $customer_id, $address_type) { // Sadece fatura adresi için vergi bilgilerini göster if ($address_type === 'billing') { $tax_number = get_user_meta($customer_id, 'billing_tax_number', true); $tax_office = get_user_meta($customer_id, 'billing_tax_office', true); if (!empty($tax_number)) { $fields['tax_number'] = 'Vergi Numarası: ' . $tax_number; } if (!empty($tax_office)) { $fields['tax_office'] = 'Vergi Dairesi: ' . $tax_office; } } return $fields; } /** * WooCommerce ödeme sayfası alan sıralamasını düzeltme */ add_filter('woocommerce_checkout_fields', 'reorder_checkout_fields'); function reorder_checkout_fields($fields) { // Fatura alanlarını düzenle if (isset($fields['billing']['billing_first_name'])) { $fields['billing']['billing_first_name']['priority'] = 10; } if (isset($fields['billing']['billing_last_name'])) { $fields['billing']['billing_last_name']['priority'] = 20; } if (isset($fields['billing']['billing_company'])) { $fields['billing']['billing_company']['priority'] = 30; } if (isset($fields['billing']['billing_tax_number'])) { $fields['billing']['billing_tax_number']['priority'] = 40; } if (isset($fields['billing']['billing_tax_office'])) { $fields['billing']['billing_tax_office']['priority'] = 50; } if (isset($fields['billing']['billing_state'])) { $fields['billing']['billing_state']['priority'] = 60; } if (isset($fields['billing']['billing_city'])) { $fields['billing']['billing_city']['priority'] = 70; } if (isset($fields['billing']['billing_address_1'])) { $fields['billing']['billing_address_1']['priority'] = 80; } if (isset($fields['billing']['billing_address_2'])) { $fields['billing']['billing_address_2']['priority'] = 90; } if (isset($fields['billing']['billing_postcode'])) { $fields['billing']['billing_postcode']['priority'] = 100; } if (isset($fields['billing']['billing_phone'])) { $fields['billing']['billing_phone']['priority'] = 110; } if (isset($fields['billing']['billing_email'])) { $fields['billing']['billing_email']['priority'] = 120; } return $fields; } // Adres düzenleme sayfası için sıralama add_filter('woocommerce_billing_fields', 'reorder_address_edit_fields', 20, 2); function reorder_address_edit_fields($fields, $country) { // Adres düzenleme sayfasında ise if (is_wc_endpoint_url('edit-address')) { // Burada anahtar yapısı farklı - önekler doğrudan kullanılıyor if (isset($fields['billing_first_name'])) { $fields['billing_first_name']['priority'] = 10; } if (isset($fields['billing_last_name'])) { $fields['billing_last_name']['priority'] = 20; } if (isset($fields['billing_company'])) { $fields['billing_company']['priority'] = 30; } if (isset($fields['billing_tax_number'])) { $fields['billing_tax_number']['priority'] = 40; } if (isset($fields['billing_tax_office'])) { $fields['billing_tax_office']['priority'] = 50; } if (isset($fields['billing_state'])) { $fields['billing_state']['priority'] = 60; } if (isset($fields['billing_city'])) { $fields['billing_city']['priority'] = 70; } if (isset($fields['billing_address_1'])) { $fields['billing_address_1']['priority'] = 80; } if (isset($fields['billing_address_2'])) { $fields['billing_address_2']['priority'] = 90; } if (isset($fields['billing_postcode'])) { $fields['billing_postcode']['priority'] = 100; } if (isset($fields['billing_phone'])) { $fields['billing_phone']['priority'] = 110; } if (isset($fields['billing_email'])) { $fields['billing_email']['priority'] = 120; } } return $fields; }
