Sıralanan tüm komut dosyalarının ve stillerin listesini nasıl edinebilirim?


12

Bir eklenti oluşturuyorum ve diğer eklentiler tarafından kullanılan tüm komut dosyalarının ve CSS'nin listesini almak istiyorum.

Bu benim fonksiyonum:

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');

Değişken içinde döndürülen değeri almak istiyorum.

Bunu denedim:

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

Ve bu benim sonucum:

NULL

Ben yazarsam echoher iç foreachdöngü, ben doğru sonuçları almak, ama nasıl bir değişken içine bu değerleri depolamak için?

[Düzenle]

Kodum da çalışmıyor bir eklenti içinde

/**
 *  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_actionbir sonuç döndürmez ve bunun yanı sıra, eylem zaten gerçekleşmiştir wp_enqueue_scripts... sadece bir küresel yaratmak daha kolaydır, örneğin. global $crunchifyenqueued; $crunchifyenqueued = $result;daha sonra değişkene erişmek için sonraki fonksiyonunuzda global çağrıyı tekrar çağırın.
majick

Cevabınız için teşekkürler, ancak sorunu çözmedi, var_dump ($ crunchifyenqueued) için yanıt "NULL".
Edouard Kombo

o zaman neden kullanmıyorsunuz apply_filters? bundan kolayca dönüş değerini alabilirsiniz.
majick

Zaten denedim, sonucu bir değişkenin içine kaydedemiyorum.
Edouard Kombo

Tabii ki bir küresel kullanarak?
majick

Yanıtlar:


11

do_actiontam olarak böyle çalışmıyor. WP'yi aradığınızda do_action('crunchify_print_scripts_styles'), kayıtlı bir kancaya eklenmiş olanların kayıtlı eylemleri ve filtreleri listesine bakar crunchify_print_scripts_stylesve bu işlevleri çalıştırır.

Ve muhtemelen bunu kaldırmak istiyorsunuz:

add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');

... çünkü fonksiyonunuzun geri dönüş sonucunu alamıyorsunuz.

Ayrıca bu özel kancayı kullandığınızda , listenizi oluşturduktan sonra diğer işlevlerin daha fazla komut dosyası veya stil içermediğini garanti edemezsiniz . Kolaylık sağlamak için wp_head gibi tüm komut dosyaları ve stiller sıralandıktan sonra tetiklenen bir kanca kullanın veya sonucu görüntülemek istediğinizde temanızdaki işlevinizi çağırın.

Kodunuzu bu şekilde yeniden çalışmanız gerekir ...

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;
}

Ardından temanızın içinde:

print_r( crunchify_print_scripts_styles() );

... hata ayıklama sonuçlarını veya elbette ...

$all_the_scripts_and_styles = crunchify_print_scripts_styles();

... manipüle etmeniz için size bir liste verecek.

Tema içinde çağırmak, tüm komut dosyaları ve stiller sıralandıktan sonra aramanızı sağlar.

Eklentinizden aramak için, yukarıda bahsettiğim gibi wp_head gibi wp_enqueue_scripts'ten sonra çalışan herhangi bir kancaya takın:

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 teşekkürler, ama yapmak istediğim bir eklenti içinde bu değerleri elde etmektir. Eklentim bu değerleri json biçiminde döndürecektir.
Edouard Kombo

Sonra $all_the_scripts_and_styles = crunchify_print_scripts_styles();eklentinizin içine koyun ! Cevabı uyandırdı.
Andy Macaulay-Brook

Çalışmıyor, hem komut dosyaları hem de stiller boş. global wp_scripts global wp_stylesTamamen boş görünüyor . Ama bir ile çalışıyorlardo_action or apply_filters
Edouard Kombo

İşlevinizi wp_enqueue_scriptsbaşlangıçta önerdiğim gibi eylemden daha sonra mı çağırıyorsunuz ?
Andy Macaulay-Brook

Cevabı daha açık hale getirmek için genişlettim.
Andy Macaulay-Brook

7

Sıkıştırılmış komut dosyalarına ve stillere zamanında ve düzgün bir şekilde erişmek için wp_print_scriptsve wp_print_styleseylemlerini kullanabilirsiniz , çünkü bu eylemler komut dosyaları ve stiller belgeye dahil edilmeden önceki son olaylardır ve bu nedenle stillerdeki değişikliklerin veya stiller üzerinde etkili olabileceği son olaydır. ve belgede bulunan komut dosyaları.$wp_styles$wp_scripts

Bu nedenle, bundan daha emin olabileceğiniz $wp_stylesve $wp_scriptsbelgeye etkili bir şekilde dahil edilen komut dosyalarını ve stilleri içerebileceğiniz etkinliklerdir.

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;
    }
}

Eğer bildirirseniz $enqueued_scriptsadn $enqueued_styles(bir yöntemin özelliği içinde saklayın olabilir örneğin veya herhangi bir geçerli kapsam,) küresel değişkenler olarak, daha sonraki bir eylem komut ve stiller listesine erişebilir.

Örneğin (sadece kısa bir örnek):

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

Tüm stillerin bir listesini gerçekten almak istiyorsanız , yeni 'script_loader_tag' filtresini kullanabilirsiniz (Sürüm 4.1'den beri).

"Wp_print_scripts":

Admin-header.php ve 'wp_head' kancası tarafından çağrılır.

yani altbilgide komut dosyası göstermez.

Referanslar:

WordPress Komut Dosyalarına Erteleme ve Zaman Uyumsuzluk Özellikleri Ekleme

wp_print_scripts


Bunun nasıl kullanılacağına dair bir örneğiniz var mı?
lonix

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.