स्क्रिप्ट / शैली और निर्भरता का URL पुनर्प्राप्त करें

Aug 16 2020

स्क्रिप्ट XY और Z को देखते हुए मुझे XYZ के PHP में सूची और उनकी निर्भरता कैसे मिलेगी?

मुझे कई स्क्रिप्ट को लोड करने की आवश्यकता है जिसमें निर्भरताएं हैं।

आम तौर पर मैं के माध्यम से ऐसा होता है wp_enqueue_scriptलेकिन इस स्थिति मैं एक webcomponent के लिए एक छाया डोम में इन स्क्रिप्ट लोड करने की जरूरत है, और पर भरोसा नहीं कर सकते wp_headऔर wp_footerमैं डोम तत्वों अपने आप जे एस में निर्माण करने के लिए है। यह इसलिए है ताकि स्टाइल के उद्देश्यों के लिए घटक की सामग्री शेष पृष्ठ से अलग हो जाए।

जवाब

2 SallyCJ Aug 16 2020 at 08:05

wp_enqueue_script()और wp_enqueue_style()दोनों का उपयोग करते हैं, WP_Dependencies::add()जो _WP_Dependency(देखें wp_scripts()और wp_styles()) के एक नए उदाहरण को आरंभ करता है , इसलिए सभी स्क्रिप्ट की निर्भरता depsवर्ग के उदाहरण की संपत्ति में संग्रहीत की जाती हैं।

हालांकि, उस संपत्ति केवल संग्रहीत करता है संभाल स्क्रिप्ट के निर्भरता, जैसे के नाम jquery-migrateऔर jquery-core(संभाल नाम: डिफ़ॉल्ट / कोर jQuery स्क्रिप्ट के लिए jquery), तो एक निर्भरता फ़ाइल (स्क्रिप्ट / स्टाइलशीट) के वास्तविक URL प्राप्त करने के लिए, हम उपयोग करने की आवश्यकता होगी WP_Dependencies::all_deps()और फिर WP_Dependencies::$to_doनिर्भरता के srcमूल्य प्राप्त करने के लिए लूप :

// Enqueue a script:
wp_enqueue_script( 'my-script', '/path/to/file.js', [ 'jquery' ] );

// Get all its dependencies:
wp_scripts()->all_deps( 'my-script' );
foreach ( wp_scripts()->to_do as $handle ) {
    $dep = wp_scripts()->registered[ $handle ];
    var_dump( $dep->handle, $dep->src );
    // or do something with $dep->src ... } // Enqueue a style: wp_enqueue_style( 'my-style', '/path/to/file.css', [ 'foo-dep' ] ); // Get all its dependencies: wp_styles()->all_deps( 'my-style' ); foreach ( wp_styles()->to_do as $handle ) {
    $dep = wp_styles()->registered[ $handle ];
    var_dump( $dep->handle, $dep->src );
    // or do something with $dep->src ...
}

ध्यान दें कि $dep->srcएक हो सकता है falseअगर निर्भरता , निर्भरता शामिल डिफ़ॉल्ट जैसे jqueryसंभाल जो jquery-migrateएक निर्भरता के रूप में। (लेकिन चिंता न करें, निर्भरता to_doसरणी में होगी ।) और दूसरी बात, to_doसरणी में वास्तविक फ़ाइल भी शामिल है, उदाहरण file.jsके लिए उपरोक्त उदाहरण में।