चेकआउट कस्टम फ़ील्ड मान सहेजें और WooCommerce व्यवस्थापक आदेशों में प्रदर्शित करें

Jan 07 2021

मेरे पास मेरे चेकआउट में कुछ अतिरिक्त क्षेत्र हैं जो ग्राहक से उनके आदेश के बारे में कुछ चीजों के बारे में प्रश्न पूछते हैं। इनमें से अधिकांश पाठ इनपुट फ़ील्ड हैं, लेकिन एक चयन मेनू है जो उनसे पूछ रहा है कि उन्होंने मेरे क्लाइंट साइट के बारे में कैसे सुना। मैं यह पता लगाने में असमर्थ हूं कि चयनित विकल्प के लिए ऑर्डर के मेटा क्षेत्र में मूल्य कैसे प्रदर्शित किया जाए। यहां बताया गया है कि मैं अपनी थीम से चुन कर अपने फ़ंक्शन में ड्रॉप डाउन उत्पन्न कर रहा हूं।

woocommerce_form_field( 'aba_hear', array(
    'type'     => 'select',
    'required' => 'true',
    'class'    => array('hear-class form-row-wide'),
    'label'    => __('How did You Hear About Us?'),
    'options'  => array( // options for <select> or <input type="radio" />
        ''          => 'Please select', // empty values means that field is not selected
        'Instagram' => 'Instagram',
        'Facebook'  => 'Facebook',
        'Yelp'  => 'Yelp',
        'Other' => 'Other',
    )

), $checkout->get_value( 'aba_hear' ) );

अब मैं आर्डर मेटा वैल्यूज़ को अपडेट करने के लिए एक फंक्शन जोड़ता हूँ:

add_action( 'woocommerce_checkout_update_order_meta', 'aba_checkout_field_update_order_meta' );

function aba_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['aba_hear'] ) ) { update_post_meta( $order_id, 'How did You Hear About Us&#63;', sanitize_text_field( $_POST['aba_hear'] ) );
    }
}

और अंत में ऑर्डर पेज पर मूल्य प्रदर्शित करें:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'aba_checkout_field_display_admin_order_meta', 10, 1 );
function aba_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('How did You Hear About Us&#63;').':</strong> ' . get_post_meta( $order->id, 'Is this a Gift&#63;', true ) . '</p>';
}

अंतिम रूप से चेकआउट में मेनू का कोड कैसे दिखाई देता है:

<p class="form-row hear-class form-row-wide validate-required" id="aba_hear_field" data-priority="">
    <label for="aba_hear" class="">How did You Hear About Us&#063;&nbsp;<abbr class="required" title="required">*</abbr></label>
    <span class="woocommerce-input-wrapper">
        <select name="aba_hear" id="aba_hear" class="select " data-allow_clear="true" data-placeholder="Please select">
            <option value=""  selected='selected'>Please select</option>
            <option value="Instagram" >Instagram</option>
            <option value="Facebook" >Facebook</option>
            <option value="Yelp" >Yelp</option>
            <option value="Other" >Other</option>
        </select>
    </span>
</p>

अब, यह पाठ इनपुट फ़ील्ड के लिए ठीक काम करता है, लेकिन मेनू का चयन नहीं करता है। मैं इसे काम करने के लिए कैसे बदल सकता हूं ताकि मैं परिणामी डेटा प्रदर्शित कर सकूं?

जवाब

1 LoicTheAztec Jan 07 2021 at 15:07

आपके कुछ कार्यों में कुछ गलतियाँ हैं ... आपको निम्नलिखित कार्यों में मेटा कुंजी के समान चेकआउट फ़ील्ड कुंजी का उपयोग करने की आवश्यकता है:

दूसरे फ़ंक्शन में, आप एक और हुक का उपयोग करते हैं और कस्टम फ़ील्ड को उपयोगकर्ता मेटा डेटा के रूप में भी सहेजते हैं:

add_action( 'woocommerce_checkout_create_order', 'aba_checkout_field_update_order_meta' );

function aba_checkout_field_update_order_meta( $order ) { if ( isset($_POST['aba_hear']) && ! empty($_POST['aba_hear']) ) { $order->update_meta_data( '_aba_hear', sanitize_text_field( $_POST['aba_hear'] ) ); // Update user data if( $order->get_user_id() > 0 ) {
            update_user_meta( $order->get_user_id(), 'aba_hear', true );
        }
    }
}

3 फ़ंक्शन में इसका उपयोग करें:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'aba_checkout_field_display_admin_order_meta', 10, 1 );
function aba_checkout_field_display_admin_order_meta( $order ){
    $value = $order->get_meta( '_aba_hear' );

    if ( ! empty($value) ) { echo '<p><strong>'.__('How did You Hear About Us&#63;').':</strong> ' . $value . '</p>';
    }
}

इसे अब बेहतर काम करना चाहिए।


टिप्पणियाँ:

इस चेकआउट फ़ील्ड को कस्टम उपयोगकर्ता मेटा डेटा के रूप में भी क्यों सहेजा जा रहा है?

क्योंकि आपके पहले फ़ंक्शन में आपके पास $checkout->get_value( 'aba_hear' )कस्टम चेकआउट फ़ील्ड में ग्राहक के अंतिम ऑर्डर पर चयनित मूल्य प्रदर्शित होगा। मान उपयोगकर्ता मेटा 'aba_hear' से पढ़ा जाता है।