व्यवस्थापक पैनल में woocommerce आदेशों में कस्टम फ़ील्ड कैसे प्रदर्शित करें?


13

वर्तमान में मैं woocommerce में एक कस्टम बिलिंग फ़ील्ड जोड़ रहा हूँ

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

मुझे व्यवस्थापक पक्ष में इस फ़ील्ड मान को संपादित करने की आवश्यकता है। वर्तमान में मैं बिलिंग पते में अन्य सभी मूल्यों को संपादित कर सकता हूं लेकिन यह मान व्यवस्थापक अनुभाग में दिखाई नहीं दे रहा है। मैं केवल व्यवस्थापक अनुभाग में मान देखने के लिए निम्न कोड का उपयोग करता हूं।

function order_phone_backend($order){
    echo "<p><strong>Billing phone 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

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

मैंने दस्तावेज़ीकरण https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ पढ़ा । लेकिन सही काम करने वाले इस दस्तावेज़ में सब कुछ बिलिंग_फोन / फोन कस्टम फ़ील्ड के तहत नोट किया गया है। मैं स्क्रीन विकल्प की जांच करता हूं, लेकिन मैं पहले से ही कस्टम फ़ील्ड पर टिक कर चुका हूं। अन्य कस्टम फ़ील्ड और उसके मूल्य दृश्यमान और संपादन योग्य हैं।

मैं इस मूल्य को बैक एंड में कैसे संपादित कर सकता हूं। कृपया मदद कीजिए ।


आपके प्रश्न में पहला कोड ब्लॉक, डिफ़ॉल्ट 'फ़ोन नंबर' फ़ील्ड को संशोधित करता है। यह चेकआउट फॉर्म में कोई नया क्षेत्र नहीं जोड़ता है। चेकआउट फ़ील्ड "कस्टम फ़ील्ड" के तहत उपलब्ध नहीं होंगे, इसलिए कृपया इसे वहां न खोजें। यदि आप बिलिंग पते या शिपिंग पते से किसी भी क्षेत्र को संपादित करना चाहते हैं, तो बैकएंड पर जाएं और ऑर्डर सूची के तहत किसी भी ऑर्डर पर क्लिक करें। फिर आपको 'बिलिंग विवरण' और 'शिपिंग विवरण' शीर्षक के अलावा एक छोटा सा संपादन आइकन दिखाई देगा। उस पर क्लिक करने से आप उन विवरणों को संपादित कर सकेंगे। आशा है कि ये आपकी मदद करेगा।
प्रसाद नेवासे

कृपया अब मेरा कोड देखें
Ron

जवाबों:


22

आपके द्वारा प्रदान किया गया कोड अधूरा है। सुनिश्चित नहीं हैं कि केवल वही कोड है जिसे आप उपयोग करना चाहते हैं। इसलिए, पहले कोड ब्लॉक के अलावा जो आपने प्रदान किया है, bellow मैं बाकी सभी कोड जोड़ रहा हूं जो 'ऑर्डर विवरण' बॉक्स में बैकएंड पर नए फ़ील्ड को दिखाने और कस्टम फ़ील्ड के माध्यम से इसे संपादन योग्य बनाने के लिए आवश्यक है। कृपया ध्यान दें, अपने दूसरे कोड ब्लॉक में आपने फ़ील्ड की नाम दिया है _billing_new_phone। कोई भी कस्टम फ़ील्ड कुंजी नाम, जो _ (अंडरस्कोर) से शुरू होता है, एक छुपा कस्टम फ़ील्ड है और "कस्टम फ़ील्ड" के तहत बैकएंड पर दिखाई नहीं देगा।

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * Update the order meta with field value
 */
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_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
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>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce अपने मानक 'ऑर्डर विवरण' बॉक्स के तहत नए चेकआउट फ़ील्ड को संपादन योग्य नहीं बनाता है। यह उस बॉक्स में 'व्यू ओनली' मोड के रूप में उपलब्ध होगा लेकिन आप इसे वर्डप्रेस के मानक कस्टम फील्ड ब्लॉक के माध्यम से संपादित कर सकते हैं। स्क्रीनशॉट के नीचे देखें।

यहाँ छवि विवरण दर्ज करें


"" कोई भी कस्टम फ़ील्ड कुंजी नाम जो _ (अंडरस्कोर) से शुरू होता है, एक छुपा कस्टम फ़ील्ड है और "कस्टम फ़ील्ड" के तहत बैकएंड पर दिखाई नहीं देगा। "" आपको यह जानकारी कहाँ से मिलेगी?
रॉन


कृपया मेरे मित्र प्रश्न का हल करें stackoverflow.com/questions/49505056/…
Ron

मेरे मामले में, मुझे get_post_meta ($ आदेश-> get_id (), '_billing_phone_new', सत्य) का उपयोग करके परिणाम मिला है। मुझे get_post_meta फ़ंक्शन में चर नाम के सामने अंडरस्कोर डालना था।
दशरथ

1

यहाँ समाधान है: सीधे उत्पाद डेटा तक पहुँचने की अनुमति नहीं है, जैसे

$product->id

आगे बढ़ने की सही विधि है:

$product->get_id()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.