رفتن به مطلب

جلوگیری از نمایش دادن فیلد اضافه شده به ووکامرس در موارد خاص


پست های پیشنهاد شده

درود دوستان

من برای ارسال پستی به کد ملی خریدار نیاز دارم، بر همین اساس با کدی که تو نت پیدا کردم این مشکل رو حل کردم. محصولات سایت من دو دسته هستند دانلودی و ارسالی و قاعدتا برای محصولات دانلودی نیازی به کد ملی ندارم به کمک کدی که اون رو هم تو نت پیدا کردم، شرط گذاشتم که اگر دانلودی بود یه سری فیلد از جمله کد ملی رو نشون نده. ظاهرا همه چیز خوبه، ولی وقتی کاربر برای خرید می‌خواد تو سایت نام‌نویسی هم انجام بده، ارور می‌ده که کد ملی وارد شده صحیح نیست در حالی‌که اصلا فیلدش نمایش داده نمی‌شه.

من الان دو تا کار می‌تونم انجام بده یا کلا قید کد ملی رو بزنم که در اون‌صورت باید برای هر سفارش با خریدار تماس بگیرم و کد ملی رو درخواست کنم و یا اون رو از حالت اجباری در بیارم که باز هم معلوم نیست کاربر وارد کنه یا نه.

1- کسی هست بتونه تو کد شرط بزاره که اگر خرید دانلودی بود کد ملی رو چک نکنه؟

2- با توجه به اینکه فیلد کد ملی به صورت دستی اضافه شده، تو ایمیلی که برام ارسال میشه و سفارش رو نمایش می‌ده، کد ملی وجود نداره و باید برای دیدن اون لاگین کنم و از تو سفارشات بررسی کنم. کدی هست که بشه اون رو هم به ایمیل ارسالی اضافه کرد؟

در ادامه کدها رو هم می‌نویسم:

افزودن کد ملی:


add_filter('woocommerce_checkout_fields', 'custom_woocommerce_billing_fields');
 
function custom_woocommerce_billing_fields($fields)
{
    $fields['billing']['billing_ncode'] = array(
        'label' =>'کد ملی',
        'placeholder' =>'',
        'required' => True,
        'clear' => false, 
        'type' => 'text',
        
    );
 
    return $fields;
}

add_action('woocommerce_checkout_process', 'wh_phoneValidateCheckoutFields');

function wh_phoneValidateCheckoutFields() {
    $billing_ncode = filter_input(INPUT_POST, 'billing_ncode');


 if(!preg_match('/^[0-9]{10}$/',$billing_ncode))
        wc_add_notice(__('  کدملی وارد شده کمتر از ده رقم است، لطفا کد ملی را صحیح وارد نمایید '), 'error');

    for($i=0;$i<10;$i++)
        if(preg_match('/^'.$i.'{10}$/',$billing_ncode))
       wc_add_notice(__('  کدملی نامعتبر است، لطفا کد ملی را صحیح وارد نمایید .'), 'error');
    for($i=0,$sum=0;$i<9;$i++)
        $sum+=((10-$i)*intval(substr($billing_ncode, $i,1)));
    $ret=$sum%11;
    $parity=intval(substr($billing_ncode, 9,1));
    if(($ret<2 && $ret==$parity) || ($ret>=2 && $ret==11-$parity))
        return true;
       wc_add_notice(__(' کدملی نامعتبر است، لطفا کد ملی را صحیح وارد نمایید .'), 'error');


    
}
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['billing_ncode'] ) ) {
        update_post_meta( $order_id, 'billing_ncode', sanitize_text_field( $_POST['billing_ncode'] ) );
    }
}



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>'.__('کد ملی').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_ncode', true ) . '</p>';
}

 

حذف فیلدهای اضافه در فایل دانلودی:

function kanithemes_hide_checkout_fields_for_virtual_products( $fields ) {
	
	$only_virtual = true;
	
	foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
		// Check if there are non-virtual products
		if ( ! $cart_item['data']->is_virtual() ) $only_virtual = false;	
	}
    
 	if( $only_virtual ) {
	    unset($fields['billing']['billing_company']);
	    unset($fields['billing']['billing_address_1']);
	    unset($fields['billing']['billing_address_2']);
	    unset($fields['billing']['billing_city']);
	    unset($fields['billing']['billing_postcode']);
	    unset($fields['billing']['billing_country']);
	    unset($fields['billing']['billing_state']);
	    unset($fields['billing']['billing_phone']);
	    unset($fields['billing']['billing_ncode']);
	    add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
  	}
    
  	return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'kanithemes_hide_checkout_fields_for_virtual_products' );

 

با سپاس از همه دوستان

لینک به ارسال

مشکل رو حل کردم، اگر کس دیگه‌ای هم این مشکل رو داره این بخش از کد رو حذف کنه:

if(!preg_match('/^[0-9]{10}$/',$billing_ncode))
        wc_add_notice(__('  کدملی وارد شده کمتر از ده رقم است، لطفا کد ملی را صحیح وارد نمایید '), 'error');

    

مربوط به کد ملی

  • تشکر 1
لینک به ارسال

دوستان مشکل دوم رو هنوز دارم اگر کسی راه حلی داره لطفا بگه. :)

2- با توجه به اینکه فیلد کد ملی به صورت دستی اضافه شده، تو ایمیلی که برام ارسال میشه و سفارش رو نمایش می‌ده، کد ملی وجود نداره و باید برای دیدن اون لاگین کنم و از تو سفارشات بررسی کنم. کدی هست که بشه اون رو هم به ایمیل ارسالی اضافه کرد؟

لینک به ارسال
در در ۱۴۰۰/۵/۳ در 10:00، karimi گفته است :

2- با توجه به اینکه فیلد کد ملی به صورت دستی اضافه شده، تو ایمیلی که برام ارسال میشه و سفارش رو نمایش می‌ده، کد ملی وجود نداره و باید برای دیدن اون لاگین کنم و از تو سفارشات بررسی کنم. کدی هست که بشه اون رو هم به ایمیل ارسالی اضافه کرد؟

سلام 

کد را داخل فایل فانکشن بگذارید

add_filter('woocommerce_email_order_meta_keys', 'my_custom_meta_keys');

function my_custom_meta_keys( $keys ) {
     $keys[] = 'billing_ncode';
     return $keys;
}

امیدوارم مشکل حل شود

  • امتیاز 1
لینک به ارسال
در 23 دقیقه قبل، karimi گفته است :

با سپاس از شما، بله کار کرد و کد ملی رو برام فرستاد.

فقط یک  مورد رو می‌خوام بدونم. فایل css ایمیل ارسالی کدوم بخش که بتونم بهش استایل بدم؟

خوشحالم که مشکل رفع شد.

احتمالا از طریق فایل استایل بشه اعمال کرد . 

جناب asadiy4n بهتر میتوانند راهنمایی نمایند

  • پسندیدن 1
لینک به ارسال
در 22 ساعت قبل، amirhosseinkavianfardf گفته است :

ممنون از پاسخگوییتون

امکانش هست یکم بیشتر توضیح بدید 

ممنونم

الان به صورت زیر دیده میشه می‌خوام اگه بشه تو بخش آدرس صورتحساب نمایش داده بشه.

001.jpg.4278f36a6f50502a927d4910b7e73164.jpg

ویرایش شده توسط karimi
لینک به ارسال

در مرور گر کروم روی همین قسمت راست کلیک کنید Inspect را انتخاب کنید مرورگرهای دیگه هم دارن فقط اسمش کمی فرق داره . بعد از سمت راست میتوانید کلاس قسمت مورد نظر را ببینید و تغییر دهید سپس  کل کلاس را که تغییر دادید به فایل style.css اضافه کنید 

لینک به ارسال

لطفا برای ارسال دیدگاه وارد شوید

شما بعد از اینکه وارد حساب کاربری خود شدید می توانید دیدگاهی ارسال کنید



ورود به حساب کاربری
×
×
  • اضافه کردن...