Wp_register_style में क्रॉसोरिगिन और अखंडता कैसे जोड़ें? (फ़ॉन्ट विस्मयकारी 5)


13

मैं फ़ॉन्ट विस्मयकारी 4 से संस्करण 5 में अपग्रेड कर रहा हूं जो <link rel="stylesheet">मार्कअप के लिए अखंडता और क्रॉसोरिजिन विशेषताओं दोनों का परिचय देता है ।

वर्तमान में, मैं उपयोग कर रहा हूँ:

wp_register_style('FontAwesome', 'https://example.com/font-awesome.min.css', array(), null, 'all' );
wp_enqueue_style('FontAwesome');

निम्नानुसार कौन सा आउटपुट:

<link rel="stylesheet" id="FontAwesome-css" href="https://example.com/font-awesome.min.css" type="text/css" media="all" />

फ़ॉन्ट विस्मयकारी 5 के साथ यह दो नई विशेषताओं और मूल्यों का परिचय देता है ( integrityऔर crossorigin) जैसे:

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">

इसलिए मुझे यह पता लगाने की आवश्यकता है कि मैं wp_register_style में अखंडता और क्रॉसोरिजिन दोनों को कैसे जोड़ सकता हूं, मैंने कोशिश की है लेकिन उपयोग करने के मेरे प्रयास wp_style_add_dataविफल हो गए हैं, ऐसा लगता है कि यह विधि केवल समर्थन करती है conditional, rtlऔर suffix, altऔर title



धन्यवाद @JacobPeattie, सवाल थोड़ा अलग है, लेकिन दिया गया जवाब इस मामले में लागू हो सकता है। हालाँकि, यह 2016 तक की है, शायद अब एक तरीका है जो कम हैक करने वाला लगता है ...
Pipo

@Pipo मैं एक वर्डप्रेस डेवलपर हूं और वर्डप्रेस प्लगइन्स के एक जोड़े को बनाया है, मैं कुछ कस्टम लोडिंग करने के लिए style_loader_tag और script_loader_tag का उपयोग करता हूं। यहां तक ​​कि मेरे स्क्रिप्ट टैग में defer और async जोड़ रहा है। मेरा एक ओपन सोर्स प्लगइन देखें: github.com/Remzi1993/wp-jquery-manager
रेमज़ी कैवदार

@ पीपो तुम भी सही थे। दूसरी पोस्ट पुरानी है और वह अब काम नहीं करेगी। अपने पहले उदाहरण में, मैंने दिखाया है कि आप एक साधारण स्ट्रिंग की जगह यह कैसे कर सकते हैं। मैंने थोड़ी और जानकारी भी डाल दी है ताकि अन्य लोग इस जानकारी का उपयोग कर सकें
Remzi Cavdar

@JacobPeattie क्या आप देख सकते हैं? मुझे कुछ व्याकरण की त्रुटियां हो सकती हैं, अंग्रेजी मेरी दूसरी भाषा है
रेमजी कैवदार

जवाबों:


16

style_loader_tag
style_loader_tag एक आधिकारिक WordPress API है, दस्तावेज़ीकरण देखें: https://developer.wordpress.org/reference/hooks/style_loader_tag/

apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
एक संलग्न शैली के HTML लिंक टैग को फ़िल्टर करता है।


पहले अपनी स्टाइलशीट को संलग्न करें, दस्तावेज़ीकरण देखें: https://developer.wordpress.org/reference/functions/wp_enqueue_style/

wp_enqueue_style( 'font-awesome-5', 'https://use.fontawesome.com/releases/v5.5.0/css/all.css', array(), null );

$handleहै 'font-awesome-5'
मुझे क्या करना nullहै कि वहाँ कोई संस्करण संख्या तो। इस तरह इसे कैश किया जाएगा।

सरल str_replace
एक साधारण str_replace जो आप चाहते हैं उसे प्राप्त करने के लिए पर्याप्त है, नीचे उदाहरण देखें

function add_font_awesome_5_cdn_attributes( $html, $handle ) {
    if ( 'font-awesome-5' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
    }
    return $html;
}
add_filter( 'style_loader_tag', 'add_font_awesome_5_cdn_attributes', 10, 2 );



(कई) अलग-अलग स्टाइलशीट में अलग-अलग एट्रीब्यूट्स जोड़ने के लिए एक उदाहरण के नीचे अलग-अलग एट्रीब्यूट्स जोड़ें

function add_style_attributes( $html, $handle ) {

    if ( 'font-awesome-5' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
    }

    if ( 'another-style' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='blajbsf' example", $html );
    }

    if ( 'bootstrap-css' === $handle ) {
        return str_replace( "media='all'", "media='all' integrity='something-different' crossorigin='anonymous'", $html );
    }

    return $html;
}
add_filter( 'style_loader_tag', 'add_style_attributes', 10, 2 );


सभी शैलियों में विशेषताएँ जोड़ें
एक उदाहरण के नीचे एक से अधिक शैलियों को एक ही एट्रीब्यूट जोड़ने के लिए

function add_attributes_to_all_styles( $html, $handle ) {

        // add style handles to the array below
        $styles = array(
            'font-awesome-5',
            'another-style',
            'bootstrap-css'
        );

        foreach ( $styles as $style ) {
            if ( $style === $handle ) {
                return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
            }
        }

        return $html;
}
add_filter( 'style_loader_tag', 'add_attributes_to_all_styles', 10, 2 );




script_loader_tag
मैं script_loader_tag भी समझाना चाहूंगा, क्योंकि यह भी आसान है, लेकिन यह API wp_enqueue_script के साथ मिलकर काम करता है ।

Script_loader_tag API लगभग समान है, केवल कुछ छोटे अंतर हैं, दस्तावेज़ीकरण देखें: https://developer.wordpress.org/reference/hooks/script_loader_tag/

apply_filters( 'script_loader_tag', $tag, $handle, $src )
HTML स्क्रिप्ट टैग की गई स्क्रिप्ट को फ़िल्टर करता है।


एक एकल स्क्रिप्ट को स्थगित करने के लिए एक उदाहरण के नीचे

function add_defer_jquery( $tag, $handle ) {
    if ( 'jquery' === $handle ) {
        return str_replace( "src", "defer src", $tag );
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'add_defer_jquery', 10, 2 );


एक से अधिक स्क्रिप्ट को टालने के लिए एक उदाहरण के नीचे

function add_defer_attribute( $tag, $handle ) {

    // add script handles to the array below
    $scripts_to_defer = array(
        'jquery',
        'jquery-migrate',
        'bootstrap-bundle-js'
    );

    foreach ( $scripts_to_defer as $defer_script ) {
        if ( $defer_script === $handle ) {
            return str_replace( "src", "defer src", $tag );
        }
    }

    return $tag;
}
add_filter( 'script_loader_tag', 'add_defer_attribute', 10, 2 );

इसलिए मैं दोनों एपीआई समझा दिया है style_loader_tagऔर script_loader_tag। और मैंने एपीआई के दोनों के लिए कुछ उदाहरण दिए हैं मुझे आशा है कि यह बहुत से लोगों के लिए उपयोगी है। मुझे दोनों एपीआई के साथ अनुभव है।


अद्यतन
@CKMacLeod आपके अपडेट के लिए धन्यवाद, यह चीजों को स्पष्ट करता है। हम ज्यादातर एक ही पृष्ठ पर हैं। जैसा कि मैंने कहा, मैं एक वर्डप्रेस डेवलपर हूं और अगर आप https://wordpress.org पर एक थीम और / या प्लगइन प्रकाशित करना चाहते हैं, तो आप अनिवार्य रूप से " वर्डप्रेस कोडिंग मानकों " का पालन करने के लिए मजबूर हैं या वे बस आपका अस्वीकार करेंगे विषय और / या प्लगइन।

इसलिए मैं डेवलपर्स को "वर्डप्रेस तरीके" का उपयोग करने के लिए प्रोत्साहित करता हूं। मैं समझता हूं कि कभी-कभी कोई मतभेद नहीं होते हैं, लेकिन यह भी सुविधा है। जैसा कि आपने खुद कहा था कि आप फॉन्ट को डाउनलोड कर सकते हैं और इसे अपने विषय और / या प्लगइन में शामिल कर सकते हैं, इस तरह से आपको केवल style_loader_tag फ़ंक्शन को निकालना होगा और अपने wp_enqueue_style फ़ंक्शन को संशोधित करना होगा।

और एक आखिरी चीज, अतीत में (5 साल पहले) कुछ कैशिंग, संयोजन और माइनिंग प्लगइन्स काम नहीं करते थे और ज्यादातर बार मुझे पता चलता था कि उन डेवलपर्स ने जो विषय बनाया था, उन्होंने थीम में केवल चीजों को सिर में रखा था। / या उन्हें प्रतिध्वनित किया। अधिकांश कैशिंग प्लगइन्स, जो भी (अधिकांश समय) स्क्रिप्ट के संयोजन, लघुकरण और विलंब निष्पादन के विकल्प प्रदान करते हैं, खराब कोड का पता लगाने और उनके आसपास काम करने में अधिक बेहतर और बेहतर बन गए। लेकिन यह पसंद नहीं किया जाता है। इसलिए मैं लोगों को मन में मानकों / सम्मेलनों के साथ कोड करने के लिए प्रोत्साहित करता हूं।

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

EDIT
@CKMacLeod (तकनीकी) बहस के लिए धन्यवाद, मुझे उम्मीद है कि आपको एहसास होगा कि यह कितना महत्वपूर्ण है (वर्डप्रेस एपीआई का अपने विकास में उपयोग करना)। फिर से, मैं चारों ओर देख रहा हूं और अब भी अगर मैं सबसे लोकप्रिय मिनीइज़ प्लगइन्स के अक्सर पूछे जाने वाले प्रश्नों को देखता हूं, तो मैं आमतौर पर इसे एक या दूसरे तरीके से देखता हूं, उदाहरण के लिए:

प्रश्न: कुछ सीएसएस और जेएस फाइलों का विलय क्यों नहीं किया जा रहा है?
उत्तर: प्लगइन केवल आधिकारिक वर्डप्रेस एपीआई पद्धति का उपयोग करते हुए जेएस और सीएसएस फाइलों को संसाधित करता है - https://developer.wordpress.org/themes/basics/including-css-javascript/ -as एक ही डोमेन से फ़ाइलें (जब तक निर्दिष्ट न हो) सेटिंग्स पर)।

FAQ देखें: https://wordpress.org/plugins/fast-velocity-minify/


@Pipo आपका स्वागत है :)
रेमज़ी कैवदार

आरसी - मुझे लगता है कि आपका जवाब मेरी तुलना में समग्र बेहतर वर्डप्रेस अभ्यास हो सकता है (हालांकि मैं बाहरी होस्ट की गई स्क्रिप्ट और फ़ाइलों को लागू करने पर कुछ और शोध करना चाहूंगा)। फिर भी, मुझे लगता है कि हमें अपने औचित्य पर स्पष्ट होना चाहिए, न कि उन्हें देखना चाहिए, और यह भी स्वीकार करना चाहिए कि 3 पार्टी सेवाओं को शामिल करने का सही उत्तर अलग-अलग संदर्भों में भिन्न हो सकता है। इस नोट पर, अन्य उत्तर जिसे हम में से किसी ने भी नहीं माना, वैसे, एक अच्छा प्लग-इन का उपयोग कर रहा है, जैसे कि एफए के लिए बेहतर फ़ॉन्ट विस्मयकारी, क्योंकि वे अद्यतन और अन्य कार्यों को अच्छी तरह से संभाल सकते हैं।
CK मैकलियोड

हाँ, आप एफए के लिए एक प्लगइन का उपयोग करने के बारे में सही हैं। मुझे नहीं पता कि यह तब भी पसंद किया जाता है जब देवता WP विषय बनाते हैं। आमतौर पर आप अपने विषय में सब कुछ शामिल करना चाहते हैं और कम से कम प्लग इन का उपयोग कर सकते हैं।
रेमी कैवदार

इन समाधानों की जाँच करें, stackoverflow.com/questions/44827134/…
Gnasekaran Loganathan

-1

@Remzi Cavdar द्वारा script_ और style_loader_tag की समीक्षा दिलचस्प है, लेकिन, कुछ आक्रोश भड़काने के जोखिम पर, और इस उम्मीद में कि कोई मुझे याद दिला सकता है कि WP कतार का उपयोग करने का क्या फायदा होगा जैसे कि इस तरह के मामलों में, मैं ' ll आसान रास्ता निकालने की सलाह दूंगा, और हुक के माध्यम से Fontawesome की स्टाइलशीट लोड करने की।

/* ADD FONTAWESOME 5.5.0 via action hook */
add_action( 'wp_head', 'sewpd_add_fontawesome' );

function sewpd_add_fontawesome() {

echo '
<!--FONTAWESOME 5.5.0 added via functions.php -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
<!--END FONTAWESOME -->
'; 

}

कुछ का यह भी तर्क हो सकता है कि, यदि आप केवल FA के लिए उपयोग कर रहे हैं, तो कहें, थीम पाद लेख में या पोस्ट के भीतर, आपको इसे पृष्ठ के मुख्य भाग के भीतर कम करना चाहिए, क्योंकि यह इस तरह नहीं आएगा। रेंडरिंग-ब्लॉकिंग, लेकिन मैंने स्वीकार किया है कि मैंने कभी ऐसा नहीं किया है ... और मैं इसे शीर्ष पर नहीं ले जाऊँगा। यह गलत होगा। ;)

अपडेट करें

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

इससे पहले कि मैं विस्तार में जाऊं, मैं कहूंगा कि, हालांकि मुझे वास्तव में इसके अलावा किसी भी महत्वपूर्ण औचित्य का पता नहीं है, यह "वर्डप्रेस वे" की तरह है, मुझे कॉमरेड कैवदार का दृष्टिकोण पसंद है, और भविष्य में इसका उपयोग खुद कर सकते हैं। ।

हालांकि, इसके लिए उनके अन्य दावे मेरे लिए प्रेरक नहीं हैं। शायद वह या कोई और उन्हें जोड़ सकता है। यदि हां, तो मैं सब कान हूं। बॉटम-लाइन, जहां तक ​​मैं बता सकता हूं, Phatt और GTMetrix पर 20 से अधिक परीक्षण चलाने के बाद, एक परीक्षण ब्लॉग पर "कतार के माध्यम से" सिर के माध्यम से जोड़ें "की तुलना करें, ग्रेडेड प्रदर्शन के संदर्भ में कोई महत्वपूर्ण और सुसंगत अंतर नहीं है, दोनों दृष्टिकोणों के बीच पृष्ठ अनुरोधों की कुल संख्या, या लोड समय (जैसे, "फर्स्ट पेंट," फर्स्ट कंटेंटफुल पेंट, "और GTMetrix पर ओनलोड")।

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

अधिक सामान्यतः, मैंने स्क्रिप्ट और शैलियों को लोड करने के लिए विभिन्न तरीकों की एक विस्तृत श्रृंखला देखी है। उनमें से कुछ आंशिक रूप से या पूरी तरह से WP कतार को बायपास करेंगे। यह निश्चित रूप से बोधगम्य है कि ऐसे उदाहरण होंगे - एक ऐसा फ़ंक्शन जो किसी विशेष पृष्ठ पर लोड होने से रोकने के दौरान शैली के हैंडल की एक सरणी का उपयोग करता है, कहते हैं - जहां Fontawesome या अन्य 3rd पार्टी टैग होने का उल्लेख किया गया है, यह बहुत उपयोगी होगा, और यह कि प्रारंभिक दो को तैनात करता है फ़ंक्शंस - एन्क्यूइंग और फ़िल्टरिंग - वास्तव में केवल एक को लोड करने की तुलना में अधिक पारमार्थिक हो जाएगा।

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

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

वैसे भी, आपको नए "अखंडता" और "क्रॉस-ऑरिजिन" टैग के बारे में चिंता करने की ज़रूरत नहीं होगी, और अगर किसी दिन आप अपने सीडीएन बिल का भुगतान करना भूल जाते हैं, तो आपको चिंता करने की ज़रूरत नहीं होगी।

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


मैं जिज्ञासु के रूप में अच्छी तरह से कर रहा हूँ, यह इस तरह से करने का नकारात्मक पक्ष क्या है, या सीधे इसे एक विषय फ़ाइल में जोड़ रहा है?
जेरश

आपके दृष्टिकोण के लिए धन्यवाद, केवल एक चीज यह है कि आपका समाधान बहुत सारे मिनिफाइ और कैशिंग प्लगइन्स को निराश करेगा। जैसे: wordpress.org/plugins/fast-velocity-minify , wordpress.org/plugins/wp-fastest-cache और etca ....
रेमजी कैवदार

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

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

1
"वर्डप्रेस तरीका" प्लगइन्स के साथ अधिकतम अनुकूलता सुनिश्चित करता है। चाहे वह सीडीएन से चीजों को लाने के लिए हो, या कुछ विशिष्ट पृष्ठों के लिए लिंक को हटाने के लिए, अपने तरीके से यह वास्तव में कोड को संपादित किए बिना संभव नहीं है। अपने विश्वास के लिए खड़े होने के लिए +1 लेकिन यहाँ एक उत्तर के रूप में यह एक है
मार्क कपलुन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.