मैं एसीएफ के लिए नया हूं और यह समझने की कोशिश कर रहा हूं कि सामग्री के पूरे खंड कैसे बनाएं।

मुझे इसका कोई जवाब नहीं मिल रहा है, हालांकि मैं शायद अपनी सीमित समझ के कारण प्रश्न को सही ढंग से नहीं बता रहा हूं।

मैंने एसीएफ और गुटेनबर्ग का उपयोग करके अपनी पहली वेबसाइट बनाई है जहां मेरे पास सामग्री के प्रत्येक ब्लॉक के लिए एक अलग PHP टेम्पलेट है, जिसे तब गुटेनबर्ग ब्लॉक के रूप में पंजीकृत किया जाता है। यह पूरी तरह से काम करता है कि सामग्री ब्लॉक में html/php के पूरे ब्लॉक हो सकते हैं और हमेशा उपलब्ध होते हैं लेकिन जब वे चुने जाते हैं तो केवल पृष्ठ पर दिखाई देते हैं, जिससे यह बहुत उपयोगकर्ता के अनुकूल हो जाता है।

मैं यह समझने के लिए संघर्ष कर रहा हूं कि आप गुटेनबर्ग के बिना एक संपूर्ण खंड कैसे सम्मिलित कर सकते हैं - एक शोर्ट का उपयोग करके कहें।

फिलहाल अगर मेरे पास इस तरह की संरचना है:

<section class="reusable-block">

                <div class="title-box">

                    <?php if( get_field('main_heading') ): ?>
                            <h1 class="hero-heading"><?php the_field('main_heading'); ?></h1>
                    <?php endif; ?> 

                </div>  
</section>

यदि मैं शोर्टकोड [एसीएफ फ़ील्ड = "मेन_हेडिंग"] का उपयोग करता हूं तो यह स्पष्ट रूप से उस क्षेत्र की सामग्री को आउटपुट करेगा लेकिन मैं एक शोर्ट कैसे दर्ज करूं जो किसी भी पृष्ठ पर पूरे अनुभाग को आवश्यकता के आधार पर दर्ज करेगा?

अगर मैं इसे पेज टेम्प्लेट में हार्ड कोड करता हूं तो फ़ील्ड हमेशा वर्डप्रेस बैकएंड पेज पर दिखाई देते हैं, भले ही वे गीले हों, उनका उपयोग किया जा रहा है, हालांकि अगर ऐसा ही होना है तो मैं काम करूंगा।

दुर्भाग्य से मुझे एक मौजूदा प्रोजेक्ट के लिए पेज बिल्डर के साथ एसीएफ का उपयोग करने की ज़रूरत है (मेरे पास इस पर कोई विकल्प नहीं है)। यही कारण है कि मैं गुटेनबर्ग और रजिस्टर ब्लॉक का उपयोग नहीं कर सकता और शॉर्टकोड का उपयोग करने की आवश्यकता होगी।

संक्षेप में, क्या एक संपूर्ण ACF ब्लॉक बनाने का कोई तरीका है जिसमें तब html और acf फ़ील्ड होंगे, और इससे भी बेहतर जो कि एक अलग PHP फ़ाइल में बनाया जा सकता है जैसा कि आप गुटेनबर्ग के साथ संयोजन में इसका उपयोग करते समय करेंगे।

मैंने लगभग 3 पाठ्यक्रम ऑनलाइन देखे हैं और बहुत सारे संसाधन पढ़े हैं, लेकिन यह एक बात अभी भी मुझे इंगित करती है।

0
Mr Toad 6 पद 2019, 17:17

1 उत्तर

आपने पहले ही स्वयं एक संभावना का उल्लेख किया है: इसके लिए कस्टम शोर्टकोड बनाना

इसलिए, आपको या तो एक नया प्लगइन बनाना होगा, या इसे अपने (बच्चे) विषय के functions.php में जोड़ना होगा:

function shortcodeHeadingBlock($attr, $content = null) {
        if (! class_exists('ACF') ) { // will not work without ACF
            return '';
        }
        $opts = shortcode_atts([
            'field' => 'main_heading',
        ], $attr);
        ob_start();
?>
     <section class="reusable-block">
        <div class="title-box">
            <?php if( get_field($opts['field']) ): ?>
                    <h1 class="hero-heading"><?php the_field($opts['field']); ?></h1>
            <?php endif; ?>
        </div>
     </section>
<?php
        return ob_get_clean();
}

function setupShortcodes() {
        add_shortcode('headingblock', 'shortcodeHeadingBlock');
}

add_action('plugins_loaded', 'setupShortcodes');

इसके बाद आप शोर्टकोड का इस्तेमाल कर सकते हैं [headingblock] आपके पृष्ठ पर कहीं भी जहां शॉर्टकोड की व्याख्या की जाती है। शोर्टकोड पहले जांचता है कि एसीएफ-क्लास उपलब्ध है या नहीं, जिसका अर्थ है कि एसीएफ फ़ंक्शन भी उपलब्ध होना चाहिए।

शोर्टकोड में एक वैकल्पिक field विशेषता भी होती है जो डिफ़ॉल्ट रूप से 'main_heading' होती है, जिसका अर्थ है कि आप यह भी कर सकते हैं [headingblock field="another_acf_field_name"]। यह तब आपका कोड टेम्पलेट लौटाता है और वांछित ACF फ़ील्ड सम्मिलित करता है।

यदि आपका .title-box CSS व्यवस्थापक इंटरफ़ेस में उपलब्ध नहीं है, तो आपको admin_enqueue_scripts हुक का उपयोग करके इसे अलग से संलग्न करना पड़ सकता है। सीएसएस के संबंध में, आपको यह भी सुनिश्चित करना होगा कि .title-box के लिए पूर्ण चयनकर्ता में अतिरिक्त कक्षाएं/वस्तुएं शामिल नहीं हैं, जो अब शोर्टकोड को पृष्ठ पर अन्य स्थानों पर रखने पर लागू नहीं हो सकती हैं।

0
Damocles 6 पद 2019, 18:50