apply_filters ('the_content', $ content) बनाम do_shortcode ($ सामग्री)


22

आइए हम कहते हैं कि मेरे पास एक थीम विकल्प या कस्टम पोस्टमेटा पाठ क्षेत्र है। अब मैं कई शॉर्टकोड, सामान्य पाठ, चित्र आदि निष्पादित करना चाहता हूं।

सबसे अच्छा अभ्यास क्या होगा और क्यों?

विकल्प 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

विकल्प 2:

$content = //my text area data;
echo do_shortcode($content);

कृपया मुझे समझाएं कि कौन सा सबसे अच्छा अभ्यास होगा और क्यों।

संपादित करें

मुझे विवरण में परिदृश्य का वर्णन करने दें। मैं अपनी आवश्यकताओं के साथ ग्राहकों के लिए थीम विकसित करता हूं। कभी-कभी, मुझे पोस्ट / पेज / कस्टम पोस्ट प्रकारों पर पोस्ट मेटा जोड़ने की आवश्यकता होती है, ताकि वे शॉर्टकोड (स्लाइडर, संपर्क फ़ॉर्म आदि) या बस एक साधारण पाठ जोड़ सकें। यह एक पाठ दायर किया गया है।

शोर्ट काम करने के लिए, मैं विकल्प 1 का उपयोग करता हूं । अब, मैंने किसी से सुना कि यह एक गलत तरीका है, और मुझे इसका उपयोग करना चाहिए do_shortcode। लेकिन उन्होंने मुझे इसका स्पष्टीकरण नहीं दिया कि यह गलत तरीका क्यों है। इसलिए मैं पूछ रहा हूं।

यह पूरी प्रक्रिया wp के डिफ़ॉल्ट टेक्स्ट एडिटर में की जा सकती है। लेकिन मुझे टेम्पलेट विशिष्ट उपयोग के लिए उन विकल्पों को बनाने की आवश्यकता है, यही मेरे ग्राहक चाहते हैं।

जवाबों:


16

प्रश्न और उत्तर रिपोर्ट

कभी-कभी ये सवाल होते हैं जो आपको परेशान करते हैं और जीवन में बाद में फिर से आपका शिकार करते हैं, और यह एक ऐसा सवाल है।

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

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

यह मेरा विचार है:

परिदृश्य:

नोट: यह किसी भी जरूरत के अनुरूप संशोधित किया जा सकता है

किसी एकल पोस्ट पर, उपयोगकर्ता अपनी आवश्यकताओं के अनुरूप पोस्ट के बाद गतिशील रूप से कस्टम सामग्री दिखाना चाहता / चाहता है। यह गतिशील होना चाहिए। सामग्री एक कस्टम क्वेरी होनी चाहिए, और उपयोगकर्ता को यह चुनने की आवश्यकता है कि जब भी वह दिखाना चाहता है और वह क्या चाहता है

पोसलेबल समाधान:

शॉर्टकोड यहाँ काम नहीं करेंगे, क्योंकि शॉर्टकोड को कस्टम फ़ील्ड में निष्पादित नहीं किया जा सकता है। न तो do_shortcodeकाम करेगा , क्योंकि यह गतिशील नहीं है और हार्डकोड है, जो हम नहीं चाहते हैं। आपके प्रश्न के अनुसार, हम एक कस्टम फ़ील्ड का उपयोग करने जा रहे हैं। फिर से मैं तनाव, कस्टम क्षेत्र का उपयोग करने के लिए एक कस्टम क्वेरी या शॉर्टकोड निष्पादित करने के लिए नहीं

योजना:

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

अगला कदम हमारे क्षेत्र में हमारे कस्टम क्वेरी तर्क जोड़ना होगा। कहते हैं, हमें श्रेणी 1 से 3 पदों को शीर्षक से क्रमबद्ध दिखाना होगा। तो हमारे क्वेरी तर्क इस तरह दिखना चाहिए: ( स्ट्रिंग प्रारूप में )

'posts_per_page=3&cat=1&orderby=title'

यह वही है जो अब आपको अपने कस्टम फ़ील्ड में दर्ज करना चाहिए। एक बार दर्ज होने के बाद, अपने कस्टम फ़ील्ड का मान सहेजें

अगला आपके single.php में कस्टम क्वेरी का निर्माण करना होगा। यहाँ क्या आवश्यक है, हमें अपने कस्टम क्षेत्र से मूल्य प्राप्त करने की आवश्यकता है, जो वास्तव में हमारे क्वेरी तर्क हैं, और WP_Queryपोस्ट को पुनः प्राप्त करने के लिए एक नए उदाहरण के लिए फ़ीड करते हैं। हमें यह भी जांचने की आवश्यकता है कि क्या वास्तव में हमारे पास उस कस्टम फ़ील्ड में सहेजा गया मान है या नहीं, यदि कस्टम फ़ील्ड खाली है, तो कुछ भी न दिखाएं

कोड:

आप सिंगल पोस्ट के बाद सिंगल.फ्प में कुछ इस तरह की कोशिश कर सकते हैं।

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

} 

यदि उपयोगकर्ता कस्टम क्वेरी को निकालना चाहता है, तो वह बस कस्टम फ़ील्ड के मूल्य को हटा सकता है और कस्टम फ़ील्ड को खाली छोड़ सकता है। यदि उसे एक ही क्वेरी दिखाने की आवश्यकता है लेकिन श्रेणी 10 और कुल 5 पदों से, वह मूल मूल्य को निम्नलिखित के साथ बदल सकता है

'posts_per_page=5&cat=10&orderby=title'

FEW नोट:

इस कस्टम फ़ील्ड और मेटा बॉक्स में जानकारी दर्ज करते समय सही सिंटैक्स और प्रारूप का उपयोग करना महत्वपूर्ण है। सिंटैक्स त्रुटियां या गलत जानकारी अवांछित आउटपुट या यहां तक ​​कि घातक त्रुटियों को जन्म देगी। अपने ग्राहकों को ऐसी जानकारी से अवगत कराना महत्वपूर्ण है

मूल ANSWER

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

विकल्प 1

apply_filters('the_content', $content);का उपयोग सामग्री अनफ़िल्टर्ड पोस्ट सामग्री के लिए फ़िल्टर को लागू करने के लिए किया जाता है, जो आमतौर पर के उपयोग से आता है $post->post_content। इन फ़िल्टर में प्रसिद्ध फ़िल्टर wp_autopशामिल हैं जो p टैग को जोड़ता हैthe_content()

apply_filters('the_content', $content); उपयोग करने के लिए प्रयोग किया जाता है, get_postsजहां कोई भी WP_Postवस्तुओं के साथ सीधे काम करता है, setup_postdata( $post )जिसके उपयोग के लिए टेम्पलेट टैग की तरह the_content() उपलब्ध है

विकल्प 2

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

सही उपयोग निम्नानुसार है

उदाहरण: टेम्प्लेट फ़ाइल में गैलरी शोर्ट जोड़ना

echo do_shortcode( '[gallery]' )

EDIT 1

आपकी टिप्पणियों से, मैं तब एक शोर्ट का उपयोग नहीं करूंगा।

यदि आप टेक्स्ट एडिटर के माध्यम से शोर्ट नहीं जोड़ने जा रहे हैं और इसे सीधे (हार्डकोड) do_shortcodeएक टेम्प्लेट फ़ाइल के माध्यम से जोड़ने जा रहे हैं , तो मैं चाहूंगा कि केवल फंक्शन को टेम्प्लेट में जोड़ें

उदाहरण:

यदि आपके पास निम्नलिखित शोर्ट फ़ंक्शन है

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

आप फ़ंक्शन को सीधे टेम्पलेट जैसे सीधे कॉल कर सकते हैं

echo footag_func();

यह इस तरह से बहुत तेज़ है क्योंकि शोर्ट को पार्स करने की आवश्यकता नहीं है

EDIT 2

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

कभी-कभी, मुझे पोस्ट / पेज / कस्टम पोस्ट प्रकारों पर पोस्ट मेटा जोड़ने की आवश्यकता होती है, ताकि वे शॉर्टकोड (स्लाइडर, संपर्क फ़ॉर्म आदि) या बस एक साधारण पाठ जोड़ सकें। यह एक पाठ दायर किया गया है।

शोर्ट काम करने के लिए, मैं विकल्प 1 का उपयोग करता हूँ .....

कस्टम फ़ील्ड हैं नहीं पाठ फ़ील्ड और निश्चित रूप से शॉर्टकोड निष्पादित और उस बात स्लाइडर या संपर्क फ़ॉर्म के लिए इस्तेमाल किया जा करने के लिए नहीं कर रहे हैं। कस्टम फ़ील्ड को कभी भी पोस्ट और पेज में टेक्स्ट एडिटर को बदलने के लिए इस्तेमाल नहीं किया जाना चाहिए।

जैसा कि मैंने पहले कहा, apply_filters('the_content', $content);इसका मतलब कच्चे पोस्ट सामग्री के लिए प्रारूपण लागू करने के लिए किया जाता है।

आपके पास यहां दो विकल्प हैं

  • do_shortcodeसीधे टेम्प्लेट फ़ाइलों में उपयोग करें , जिसे मैं फ़ंक्शन का उपयोग करने की अनुशंसा नहीं करूंगा क्योंकि शोर्टकोड को पार्स करने की आवश्यकता नहीं है

  • विशेष पृष्ठ / पोस्ट के लिए पाठ संपादक में सीधे शोर्ट का उपयोग करें

मैं गंभीरता से अनुशंसा करूंगा कि आप अपनी संरचनाओं पर एक नया नया रूप दें और आप क्या हासिल करना चाहते हैं। कस्टम फ़ील्ड टेक्स्ट एडिटर नहीं हैं और शॉर्टकोड या स्लाइडर्स निष्पादित नहीं कर सकते हैं।

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


1
व्याख्या के लिए पीटर धन्यवाद। मुझे पहले से यह पता है। लेकिन मैं पूछ रहा था कि कौन सा विकल्प अधिक सटीक होगा यदि लक्ष्य केवल पोस्ट मेटा / थीम विकल्प टेक्सारिया से शॉर्टकोड आउटपुट करने के लिए है। फ़िल्टर की गई सामग्री प्राप्त करने के लिए मैं विकल्प 1 का उपयोग कर रहा हूं, और यह मेरी आदत बन गई है। और विकल्प 1 का उपयोग करते हुए भी एक टेक्स्टफीड से केवल एक शोर्ट प्रिंट करें। इसलिए पूछ रहा था।
тн 12 सूफी

मैंने एडिट देखा। मै तुम्हारा मतलब समझ गया। लेकिन मेरा परिदृश्य अलग है। यह पसंद है, एक पाठ दायर / क्षेत्र है, और कई लघुकोड हैं। अब उपयोगकर्ता उस क्षेत्र में किसी भी शोर्ट / एस को डाल सकता है। इसलिए मैं सीधे एक फ़ंक्शन का उपयोग नहीं कर सकता हूं। मुझे उस हिस्से को गतिशील बनाए रखने की जरूरत है।
тн 13: सूफी

वह पाठ क्षेत्र कहां है, क्या यह बैक एंड पेज एडिटर स्क्रीन के समान है
पीटर गोयन

यह एक पोस्ट मेटा हो सकता है। या यह एक थीम विकल्प हो सकता है। मैं दोनों के लिए the_content फ़िल्टर का उपयोग करता हूं।
тн

क्षमा करें, लेकिन फिर इनमें से कोई भी समझ में नहीं आता है। आप कस्टम फ़ील्ड में शॉर्टकोड का उपयोग क्यों करना चाहते हैं। आप शॉर्टकोड का इस्तेमाल क्यों करेंगे।
पीटर गोयन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.