मैं सभी लिपिबद्ध शैलियों और शैलियों की सूची कैसे प्राप्त कर सकता हूं?


12

मैं एक प्लगइन बना रहा हूं और मैं सभी स्क्रिप्ट और सीएसएस का उपयोग अन्य प्लगइन्स की सूची प्राप्त करना चाहता हूं।

यह मेरा कार्य है:

function crunchify_print_scripts_styles() {    
    $result = [];
    $result['scripts'] = [];
    $result['styles'] = [];

    // Print all loaded Scripts
    global $wp_scripts;
    foreach( $wp_scripts->queue as $script ) :
       $result['scripts'][] =  $wp_scripts->registered[$script]->src . ";";
    endforeach;

    // Print all loaded Styles (CSS)
    global $wp_styles;
    foreach( $wp_styles->queue as $style ) :
       $result['styles'][] =  $wp_styles->registered[$style]->src . ";";
    endforeach;

    return $result;
}
add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');

मैं एक वैरिएबल के अंदर लौटा हुआ मूल्य प्राप्त करना चाहता हूं।

मैंने यह कोशिश की:

$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );

और यह मेरा परिणाम है:

NULL

यदि मैं echoप्रत्येक foreachलूप के अंदर लिखता हूं , तो मुझे सही परिणाम मिलते हैं, लेकिन इन मूल्यों को एक चर के अंदर कैसे संग्रहीत किया जाए?

[संपादित करें]

एक प्लगइन के अंदर मेरा कोड जो भी काम नहीं कर रहा है

/**
 *  Get all scripts and styles from Wordpress
 */
function print_scripts_styles() {

    $result = [];
    $result['scripts'] = [];
    $result['styles'] = [];

    // Print all loaded Scripts
    global $wp_scripts;
    foreach( $wp_scripts->queue as $script ) :
        $result['scripts'][] =  $wp_scripts->registered[$script]->src . ";";
    endforeach;

    // Print all loaded Styles (CSS)
    global $wp_styles;
    foreach( $wp_styles->queue as $style ) :
        $result['styles'][] =  $wp_styles->registered[$style]->src . ";";
    endforeach;

    return $result;
}

add_action( 'wp_head', 'wp_rest_assets_init');

/**
 * Init JSON REST API Assets routes.
 *
 * @since 1.0.0
 */
function wp_rest_assets_init() {


    $all_the_scripts_and_styles = print_scripts_styles();

    if ( ! defined( 'JSON_API_VERSION' ) &&
         ! in_array( 'json-rest-api/plugin.php', get_option( 'active_plugins' ) ) ) {
             $class = new WP_REST_Assets();
             $class::$scriptsAndStyles = $all_the_scripts_and_styles;
             add_filter( 'rest_api_init', array( $class, 'register_routes' ) );
    } else {
        $class = new WP_JSON_Menus();
        add_filter( 'json_endpoints', array( $class, 'register_routes' ) );
    }
}


add_action( 'init', 'wp_rest_assets_init' );

1
do_actionएक परिणाम वापस नहीं करता है, और इसके अलावा, कार्रवाई पहले ही हो चुकी है wp_enqueue_scripts... बस एक वैश्विक बनाने के लिए आसान है, जैसे। global $crunchifyenqueued; $crunchifyenqueued = $result;फिर चर का उपयोग करने के लिए अपने बाद के फ़ंक्शन में वैश्विक कॉल करें।
मैजिक

आपके उत्तर के लिए धन्यवाद, लेकिन यह समस्या हल नहीं हुई, var_dump ($ crunchifyenqueued) के लिए प्रतिक्रिया "पूर्ण" है।
एडुआर्ड कोम्बो

तो क्यों नहीं उपयोग करते हैं apply_filters? आप उससे आसानी से रिटर्न वैल्यू प्राप्त कर सकते हैं।
मैजिक

मैंने पहले ही प्रयास किया, मैं परिणाम को एक चर के अंदर नहीं सहेज सकता।
एडोर्ड कोम्बो

बेशक आप एक वैश्विक का उपयोग करके कर सकते हैं?
मैजिक जूल

जवाबों:


11

do_actionउस तरह से काम नहीं करता है। जब आप कॉल करते हैं तो do_action('crunchify_print_scripts_styles')WP पंजीकृत कार्यों की सूची को देखता है और किसी भी हुक के लिए फ़िल्टर जिसे हुक कहा जाता है crunchify_print_scripts_stylesऔर फिर उन कार्यों को चलाता है।

और आप शायद इसे हटाना चाहते हैं:

add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');

... क्योंकि आप अपने फ़ंक्शन का रिटर्न परिणाम प्राप्त करने में सक्षम नहीं हैं।

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

इस तरह से अपना कोड काम करना चाहिए ...

function crunchify_print_scripts_styles() {

    $result = [];
    $result['scripts'] = [];
    $result['styles'] = [];

    // Print all loaded Scripts
    global $wp_scripts;
    foreach( $wp_scripts->queue as $script ) :
       $result['scripts'][] =  $wp_scripts->registered[$script]->src . ";";
    endforeach;

    // Print all loaded Styles (CSS)
    global $wp_styles;
    foreach( $wp_styles->queue as $style ) :
       $result['styles'][] =  $wp_styles->registered[$style]->src . ";";
    endforeach;

    return $result;
}

फिर अपने विषय के भीतर:

print_r( crunchify_print_scripts_styles() );

... आपको डिबगिंग के परिणाम दिखाएंगे, या निश्चित रूप से ...

$all_the_scripts_and_styles = crunchify_print_scripts_styles();

... आपको हेरफेर करने के लिए सूची देगा।

थीम में इसे कॉल करना सुनिश्चित करता है कि आप इसे सभी स्क्रिप्ट्स और शैलियों के उच्चारण के बाद कहते हैं।

अपने प्लगइन से इसे कॉल करने के लिए, इसे किसी भी हुक से संलग्न करें जो wp_enqueue_scripts की तुलना में बाद में चलता है, जैसे wp_head जैसा कि मैंने ऊपर बताया है:

add_action( 'wp_head', 'wpse_233142_process_list');

function wpse_233142_process_list() {

    $all_the_scripts_and_styles = crunchify_print_scripts_styles();
    // process your array here

}

धन्यवाद @Andy, लेकिन मैं क्या करना चाहता हूं इन मूल्यों को एक प्लगइन के अंदर प्राप्त करना है। मेरा प्लगइन एक मान प्रारूप के तहत इन मूल्यों को वापस कर देगा।
एडौर्ड कोम्बो

फिर $all_the_scripts_and_styles = crunchify_print_scripts_styles();अपने प्लगइन के अंदर डाल दिया ! सूट करने का जवाब दिया।
एंडी मैकाले-ब्रुक

यह काम नहीं करता है, स्क्रिप्ट और शैली दोनों खाली हैं। ऐसा लगता है जैसे global wp_scripts global wp_stylesपूरी तरह से खाली हैं। लेकिन वे do_action or apply_filters
एडोर्ड कोम्बो जूल

क्या आप अपने कार्य को बाद में wp_enqueue_scriptsकार्रवाई के रूप में कह रहे हैं क्योंकि मैंने मूल रूप से सिफारिश की थी?
एंडी मैकाले-ब्रुक

मैंने स्पष्ट करने के लिए उत्तर का विस्तार किया है।
एंडी मैकाले-ब्रुक

7

आप इस्तेमाल कर सकते हैं wp_print_scriptsऔर wp_print_stylesकरने के लिए कार्रवाई समय पर और ठीक से उसकी वजह से कतारबद्ध स्क्रिप्ट और शैलियों के लिए उपयोग, लिपियों और शैलियों से पहले अंतिम घटनाओं दस्तावेज़ में शामिल किए गए हैं जैसे ये कार्य कर रहे हैं और, पिछले घटना जहां पर संशोधन $wp_stylesया $wp_scriptsशैलियों पर असर हो सकता है और स्क्रिप्ट दस्तावेज़ में शामिल हैं।

तो, वे घटनाओं जहां आप और अधिक विश्वास है कि हो सकता है $wp_stylesऔर $wp_scriptsस्क्रिप्ट और शैलियों को प्रभावी ढंग से दस्तावेज में शामिल होते हैं।

add_action( 'wp_print_scripts', 'cyb_list_scripts' );
function cyb_list_scripts() {
    global $wp_scripts;
    $enqueued_scripts = array();
    foreach( $wp_scripts->queue as $handle ) {
        $enqueued_scripts[] = $wp_scripts->registered[$handle]->src;
    }
}
add_action( 'wp_print_styles', 'cyb_list_styles' );
function cyb_list_styles() {
    global $wp_styles;
    $enqueued_styles = array();
    foreach( $wp_styles->queue as $handle ) {
        $enqueued_styles[] = $wp_styles->registered[$handle]->src;
    }
}

यदि आप $enqueued_scriptsएडन $enqueued_stylesको वैश्विक चर (या किसी अन्य मान्य दायरे) के रूप में घोषित करते हैं , उदाहरण के लिए आप इसे विधि की संपत्ति में संग्रहीत कर सकते हैं), तो आप बाद की कार्रवाई में स्क्रिप्ट और शैलियों की सूची तक पहुंच सकते हैं।

उदाहरण के लिए (सिर्फ एक त्वरित उदाहरण):

global $enqueued_scripts;
global $enqueued_styles;

add_action( 'wp_print_scripts', 'cyb_list_scripts' );
function cyb_list_scripts() {
    global $wp_scripts;
    global $enqueued_scripts;
    $enqueued_scripts = array();
    foreach( $wp_scripts->queue as $handle ) {
        $enqueued_scripts[] = $wp_scripts->registered[$handle]->src;
    }
}
add_action( 'wp_print_styles', 'cyb_list_styles' );
function cyb_list_styles() {
    global $wp_styles;
    global $enqueued_styles;
    $enqueued_styles = array();
    foreach( $wp_styles->queue as $handle ) {
        $enqueued_styles[] = $wp_styles->registered[$handle]->src;
    }
}

add_action( 'wp_head', function() {
    global $enqueued_scripts;
    var_dump( $enqueued_scripts );
    global $enqueued_styles;
    var_dump( $enqueued_styles );
} );

0

यदि आप वास्तव में सभी शैलियों की एक सूची प्राप्त करना चाहते हैं, तो आप नए 'script_loader_tag' फ़िल्टर (संस्करण 4.1 के बाद से) का उपयोग कर सकते हैं ।

"Wp_print_scripts" है:

व्यवस्थापक द्वारा शीर्षक -php और 'wp_head' हुक।

यानी यह पाद लेख में स्क्रिप्ट नहीं दिखाता है।

संदर्भ:

वर्डप्रेस लिपियों में Defer & Async Attributes जोड़ें

wp_print_scripts


क्या आपके पास इसका उपयोग करने का एक उदाहरण है?
लोनिक्स

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