php - WooCommerce 3 এ চেকআউট ক্ষেত্রগুলি পুনরায় অর্ডার করছে




wordpress field (2)

আমি woocommerce_checkout_init ফিল্টারের সাহায্যে যুক্ত 2 টি কাস্টম চেকআউট ফিল্ডগুলিকে পুনরায় অর্ডার দেওয়ার চেষ্টা করছি, কেবলমাত্র যখন আমি woocommerce_checkout_fields পুনঃ অর্ডার করার জন্য প্রয়োগ করি তখন তা তাদের চিনতে পারে না এবং সেগুলি null
আমার মনে হয় এর কারণ woocommerce_checkout_init ফিল্টারটি woocommerce_checkout_init পরে চলে।

আমি কীভাবে এটি সমাধান করতে পারি?

আমার কোডটি এখানে:

add_action( 'woocommerce_checkout_init', 'wc_add_confirm_email_checkout', 10, 2 );
function wc_add_confirm_email_checkout( $checkout ) {
    $checkout->checkout_fields['billing']['billing_email2'] = array(
        'type'              => 'text',
        'label'             => __( 'Confirm Email Address', 'woocommerce' ),
        'required'          => true,
        'placeholder'       => _x( 'Confirm Email Address', 'placeholder', 'woocommerce' )
    );
}
add_action( 'woocommerce_checkout_init', 'wc_add_confirm_password_checkout', 10, 2 );
function wc_add_confirm_password_checkout( $checkout ) {
    //var_dump($checkout->checkout_fields);
    if ( get_option( 'woocommerce_registration_generate_password' ) == 'no' ) {
        $checkout->checkout_fields['account']['account_password2'] = array(
            'type'              => 'password',
            'label'             => __( 'Confirm password', 'woocommerce' ),
            'required'          => true,
            'placeholder'       => _x( 'Confirm Password', 'placeholder', 'woocommerce' )
        );
    }
}

add_filter('woocommerce_checkout_fields','reorder_woo_fields');
function reorder_woo_fields($fields) {
    $fields2['billing']['billing_first_name'] = $fields['billing']['billing_first_name'];
    $fields2['billing']['billing_last_name'] = $fields['billing']['billing_last_name'];
    $fields2['billing']['billingooglg_email'] = $fields['billing']['billing_email'];
    $fields2['billing']['billing_email2'] = $fields['billing']['billing_email2'];
    $fields2['billing']['account_password'] = $fields['account']['account_password'];
    $fields2['billing']['account_password2'] = $fields['account']['account_password2'];
    $fields2['billing']['billing_address_1'] = $fields['billing']['billing_address_1'];
    $fields2['billing']['billing_postcode'] = $fields['billing']['billing_postcode'];
    var_dump($fields2);
    //return $fields2;
}

গৃহীত উত্তরে যুক্ত করতে ...

যদি আপনাকে ফর্ম ক্ষেত্রগুলি এক ক্ষেত্রের গ্রুপ থেকে অন্য ক্ষেত্রের মধ্যে স্থানান্তরিত করতে হয়, উদাহরণস্বরূপ একটি শিপিং ফিল্ডটিকে বিলিংয়ে বা কোনও অ্যাকাউন্ট ক্ষেত্রকে বিলিংয়ে স্থানান্তর করা হয়, আপনি নিম্নলিখিতটি করতে পারেন।

function move_password_field($checkout_fields){
    // Move Account Password into Billing
    $checkout_fields['billing']['account_password'] = $checkout_fields['account']['account_password']; 

    // Remove Password from Billing
    unset($checkout_fields['account']['account_password']);

    return $checkout_fields;
}

add_filter('woocommerce_checkout_fields', 'move_password_field', 999);

WooCommerce 3+ (আপডেট) এর জন্য :

যেহেতু WooCommerce 3.0 চেকআউট ক্ষেত্রগুলি কিছুটা বদলেছে তাই আগের মতো ক্ষেত্রগুলি পুনরায় অর্ডার করা সম্ভব নয়।

একটি নতুন 'অগ্রাধিকার' যুক্তি রয়েছে যা ক্ষেত্রের অর্ডার পরিচালনা করে , পাশাপাশি চেকআউট ক্ষেত্র এবং আমার অ্যাকাউন্টের ক্ষেত্রগুলিও।

এখানে WooCommerce 3+ এর সম্পূর্ণ কার্যকরী উদাহরণ রয়েছে:

// REORDERING CHECKOUT BILLING FIELDS (WOOCOMMERCE 3+)
add_filter( "woocommerce_checkout_fields", "reordering_checkout_fields", 15, 1 );
function reordering_checkout_fields( $fields ) {

    ## ---- 1. REORDERING BILLING FIELDS ---- ##

    // Set the order of the fields
    $billing_order = array(
        'billing_first_name',
        'billing_last_name',
        'billing_email',
        'billing_phone',
        'billing_company',
        'billing_address_1',
        'billing_address_2',
        'billing_postcode',
        'billing_city',
        'billing_state',
        'billing_country'
    );

    $count = 0;
    $priority = 10;

    // Updating the 'priority' argument
    foreach($billing_order as $field_name){
        $count++;
        $fields['billing'][$field_name]['priority'] = $count * $priority;
    }

    ## ---- 2. CHANGING SOME CLASSES FOR BILLING FIELDS ---- ##

    $fields['billing']['billing_email']['class'] = array('form-row-first');
    $fields['billing']['billing_phone']['class'] = array('form-row-last');

    $fields['billing']['billing_postcode']['class'] = array('form-row-first');
    $fields['billing']['billing_city']['class'] = array('form-row-last');

    ## ---- RETURN THE BILLING FIELDS CUSTOMIZED ---- ##

    return $fields;
}

কোড আপনার সক্রিয় শিশু থিমের (অথবা থিম) ফাংশন.এফপি ফাইল বা কোনও প্লাগইন ফাইলে যায়।

WooCommerce 3 এর আগে

আমি পুরোপুরি নিশ্চিত নই, তবে আপনার কাছে এমন কিছু জিনিস রয়েছে যা আপনি অ্যাকাউন্ট ক্ষেত্রের সাথে বিলিংয়ের ক্ষেত্রগুলিকে মার্জ করার মতো করতে পারেন না। আপনি যদি এটি করতে চান তবে এখানে যা করার চেষ্টা করছেন তার থেকে অনেক জটিল হয়ে উঠছে। সেক্ষেত্রে আপনাকে পুনরায় লেখার / কয়েকটি চেকআউট টেম্পলেট তৈরি করতে হবে ...

আরেকটি বিষয় হ'ল billing_email এবং billing_phone একই billing_phone 'class' => 'form-row-first' এবং 'class' => 'form-row-last' । যখন এই শ্রেণিটি 'class' => 'form-row-wide' সংজ্ঞায়িত করা হয় না ... সুতরাং আপনারও এই 'class' ওভাররাইডিংয়ের প্রয়োজন হবে।

এর পরে আপনার 'woocommerce_checkout_init' হুক ব্যবহার করার দরকার নেই ...
আপনি এখনও 'woocommerce_checkout_fields' ব্যবহার করতে পারেন।
এছাড়াও আপনি এগুলিকে একটি ফাংশনে এভাবে মার্জ করতে পারেন:

/*
 * Creating, overriding and reordering custom fields.
 */
add_filter( "woocommerce_checkout_fields", "custom_override_checkout_fields", 11, 1 );
function custom_override_checkout_fields( $fields ) {

    // Creating 'billing_email2' field
    $fields['billing']['billing_email2'] = array(
        'type'          => 'text',
        'label'         => __( 'Confirm Email Address', 'woocommerce' ),
        'placeholder'   => _x( 'Confirm Email Address', 'placeholder', 'woocommerce' ),
        'required'      => true,
        'class'         => array('form-row-last'),
        'clear'         => true
    );

    // =======> I don't really know if you need this one  <========
    // it already exist (see in first reference link at bottom).

    // Creating 'account_password2' field 
    if ( get_option( 'woocommerce_registration_generate_password' ) == 'no' ) {
        $fields['account']['account_password2'] = array(
            'type'          => 'password',
            'label'         => __( 'Confirm password', 'woocommerce' ),
            'placeholder'   => _x( 'Confirm Password', 'placeholder', 'woocommerce' ),
            'required'      => true,
            'class'         => array('form-row-wide') //,
            // 'clear'         => true
        );
    }

    // Overriding existing billing_phone field 'class' property 
    $fields['billing']['billing_phone']['class'] = array('form-row-wide');


    // Reordering billing fields
    $order = array(
        "billing_first_name",
        "billing_last_name",
        "billing_email",
        "billing_email2",
        "billing_phone",
        "billing_company",
        "billing_address_1",
        "billing_address_2",
        "billing_postcode",
        "billing_country"
    );

    foreach($order as $field)
    {
        $ordered_fields[$field] = $fields["billing"][$field];
    }

    $fields["billing"] = $ordered_fields;

    return $fields;
}

কোড আপনার সক্রিয় শিশু থিমের (অথবা থিম) ফাংশন.এফপি ফাইল বা কোনও প্লাগইন ফাইলে যায়।

আমি আগেই বলেছি, আমি মনে করি আপনি বিলিংয়ের ক্ষেত্রগুলিকে অ্যাকাউন্ট ক্ষেত্রের সাথে একীভূত করতে পারবেন না।
'account_password2' ইতিমধ্যে উপস্থিত থাকলে যদি আপনি সরকারী 'account_password2' উল্লেখ করেন (প্রথম রেফারেন্স লিঙ্কে নীচে দেখুন), আপনার এটি তৈরি করার প্রয়োজন হতে পারে না। আপনাকে এটি পরীক্ষা করতে হবে এবং এটি টিউন করতে হবে। তবে এটি করার উপায় এটি।

তথ্যসূত্র:





checkout