WooCommerce चेकआउट टेम्प्लेट में बिलिंग फ़ील्ड को फिर से कैसे व्यवस्थित करें? [बन्द है]


15

मैं क्रियाओं और फिल्टर का उपयोग करके WooTheme के कस्टमाइज़िंग चेकआउट फ़ील्ड का उपयोग करके एक मैडलिब स्टाइल चेकआउट फॉर्म बना रहा हूं ।

चेकआउट टेम्पलेट में बिलिंग फ़ील्ड form-billing.phpइस कॉल के साथ प्रदर्शित की जाती हैं:

<?php foreach ($checkout->checkout_fields['billing'] as $key => $field) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

फ़ील्ड दिखाई देने वाले क्रम को कैसे बदल सकते हैं?

वर्तमान (डिफ़ॉल्ट) फ़ील्ड ऑर्डर है:
पहला नाम
अंतिम नाम
कंपनी (मेरे लिए छिपा हुआ)
शहर / शहर
ज़िपकोड
देश
राज्य
ईमेल
फोन

डिफ़ॉल्ट आदेश:
स्क्रीनशॉट

मैं चाहता हूं कि क्षेत्र अमेरिकियों (जहां मैं रहता हूं) के लिए एक अधिक प्राकृतिक क्रम में हो, इसलिए:
पहला नाम
अंतिम नाम
कंपनी (मेरे लिए छिपा हुआ)
शहर / शहर
राज्य
ज़िपकोड
देश
ईमेल
फोन

मैं यह कैसे कर सकता हूं?

जवाबों:


28

वही functions.phpआपके (बच्चे) विषय के माध्यम से किया जा सकता है :

add_filter("woocommerce_checkout_fields", "order_fields");

function order_fields($fields) {

    $order = array(
        "billing_first_name", 
        "billing_last_name", 
        "billing_company", 
        "billing_address_1", 
        "billing_address_2", 
        "billing_postcode", 
        "billing_country", 
        "billing_email", 
        "billing_phone"

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

    $fields["billing"] = $ordered_fields;
    return $fields;

}

सर्वश्रेष्ठ उत्तर के रूप में यह wp / wc का उपयोग करता है सबसे अच्छा अभ्यास डेटा को फ़िल्टर करने से पहले यह टेम्पलेट तक पहुंच जाता है इसलिए किसी भी टेम्पलेट फ़ाइल को अस्वीकार नहीं करना पड़ता है।
लार्ज़न

मेरे लिए काम नहीं किया
याह्या हुसैन

यह काम करने के लिए उपयोग करता है लेकिन अब नहीं करता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि चेकआउट जेएस गतिशील रूप से आदेश को बदल देता है।
कोडकिप्पल

4
इसे करने का वर्तमान तरीका प्राथमिकता देना है: - $fields['billing']['billing_country']['priority'] = 10; $fields['billing']['billing_phone']['priority'] = 20; यहाँ देखें https://wordpress.org/support/topic/change-order-of-billing-fields-on-checkout-page/
codekipple

5

उत्तर के लिए Dbranes को धन्यवाद।

बदलने के:

<?php foreach ($checkout->checkout_fields['billing'] as $key => $field) : ?>
<?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

साथ में:

<?php 
// order the keys for your custom ordering or delete the ones you don't need
$mybillingfields=array(
    "billing_first_name",
    "billing_last_name",
    "billing_company",
    "billing_address_1",
    "billing_address_2",
    "billing_city",
    "billing_state",
    "billing_postcode",
    "billing_country",
    "billing_email",
    "billing_phone",
);
foreach ($mybillingfields as $key) : ?>
<?php woocommerce_form_field( $key, $checkout->checkout_fields['billing'][$key], $checkout->get_value( $key ) ); ?>
<?php endforeach; ?>

2
यह कोड एक आंतरिक वूकोमर्स फ़ंक्शन से है। पहले उत्तर के कोड [एक फ़िल्टर] का उपयोग करना ज्यादा बेहतर होगा।
Adeerlike 16

मेरे लिए यह काम नहीं करता है। सबसे अच्छा तरीका प्रत्येक क्षेत्र की "प्राथमिकता" का उपयोग करना है, कुछ इस तरह से: $ फ़ील्ड ['बिलिंग'] ['बिलिंग_काउंट्री'] ['प्राथमिकता'] = 10; $ क्षेत्र ['बिलिंग'] ['बिलिंग_फोन ’] [' प्राथमिकता’] = 20; शायद यह Woocommerce के नए संस्करणों के कारण है, लेकिन मुझे नहीं पता।
रूहानबिदर्त

2

आप अपने विषय में एक प्रतिलिपि बना सकते हैं और चेकआउट फॉर्म को प्रस्तुत करने वाले टेम्पलेट को संपादित कर सकते हैं।

प्लगइन प्रलेखन से अनुकूलित :

उदाहरण
व्यवस्थापन आदेश सूचना को पार करने के लिए, कॉपी करें: woocommerce/templates/checkout/form-checkout.php
से
yourtheme/woocommerce/checkout/form-checkout.php

[अपडेट करें]

इस फ़ाइल में, छपे हुए फ़ील्ड के ठीक पहले, यह क्रिया हुक है do_action('woocommerce_before_checkout_billing_form', $checkout);:।

तो, यह केवल थीम में functions.phpया कस्टम प्लगइन में इस क्रिया को जोड़ने और ओपी के अपने उत्तर में दिखाए गए अनुसार फ़ील्ड को फिर से व्यवस्थित करने की बात है। टेम्पलेट को ओवरराइड करने की आवश्यकता नहीं है, या यदि आगे अनुकूलन की आवश्यकता है, तो हाँ।


आपके द्वारा उल्लिखित टेम्पलेट केवल आपको <?php do_action('woocommerce_checkout_billing'); ?>थोक के चारों ओर जाने की अनुमति देता है ।
एम-टोरिन

मुझे यह उल्लेख करना चाहिए कि मैंने वास्तविक प्लगइन फ़ाइलों की जाँच नहीं की है। आपके उत्तर के लिए अद्यतन और विस्तारित उत्तर।
ब्रासोफिलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.