Saya membuat plugin dan saya ingin mendapatkan daftar semua skrip dan CSS yang digunakan oleh plugin lain.
Ini adalah fungsi saya:
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');
Saya ingin mendapatkan nilai yang dikembalikan di dalam variabel.
Saya mencoba ini:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
Dan inilah hasil saya:
NULL
Jika saya menulis echo
di dalam setiap foreach
loop, saya mendapatkan hasil yang benar, tetapi bagaimana cara menyimpan nilai-nilai ini di dalam variabel?
[sunting]
Kode saya di dalam pluginm yang tidak berfungsi juga
/**
* 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' );
wp-enqueue-script
wp-enqueue-style
scripts
css
Edouard Kombo
sumber
sumber
do_action
tidak memberikan hasil, dan selain itu, tindakan sudah terjadi diwp_enqueue_scripts
... lebih mudah hanya untuk membuat global, misalnya.global $crunchifyenqueued; $crunchifyenqueued = $result;
sekali lagi panggil global dalam fungsi Anda nanti untuk mengakses variabel.apply_filters
? Anda dapat dengan mudah mendapatkan nilai pengembalian dari itu.Jawaban:
do_action
tidak cukup bekerja seperti itu. Saat Anda menelepon,do_action('crunchify_print_scripts_styles')
WP melihat daftar tindakan dan filter terdaftar untuk apa pun yang dilampirkan pada sebuah pengait yang disebutcrunchify_print_scripts_styles
dan kemudian menjalankan fungsi-fungsi tersebut.Dan Anda mungkin ingin menghapus ini:
... karena Anda tidak dapat memperoleh hasil pengembalian dari fungsi Anda.
Juga ketika Anda menggunakan pengait khusus ini, Anda tidak dapat menjamin bahwa fungsi-fungsi lain tidak membuat lebih banyak skrip atau gaya setelah Anda membuat daftar. Gunakan pengait yang diaktifkan setelah semua skrip dan gaya telah enqueued, seperti wp_head, untuk kenyamanan, atau lebih baik lagi panggil fungsi Anda di dalam tema Anda saat Anda ingin menampilkan hasilnya.
Pengerjaan ulang kode Anda seperti ini harus bekerja ...
Kemudian di dalam tema Anda:
... akan menampilkan hasil untuk debugging, atau tentu saja ...
... akan memberi Anda daftar untuk dimanipulasi.
Memanggilnya dalam tema memastikan Anda memanggilnya setelah semua skrip dan gaya enqueued.
Untuk memanggilnya dari plugin Anda, lampirkan ke semua kait yang berjalan lebih lambat dari wp_enqueue_scripts, seperti wp_head seperti yang saya sebutkan di atas:
sumber
$all_the_scripts_and_styles = crunchify_print_scripts_styles();
dalam plugin Anda! Tweaked jawaban yang sesuai.global wp_scripts
global wp_styles
benar-benar kosong. Tetapi mereka bekerja dengando_action or apply_filters
wp_enqueue_scripts
tindakan seperti yang saya rekomendasikan semula?Anda dapat menggunakan
wp_print_scripts
dan mengambilwp_print_styles
tindakan untuk mengakses skrip dan gaya dengan tepat waktu dan semestinya , karena tindakan ini adalah peristiwa terakhir sebelum skrip dan gaya disertakan dalam dokumen dan, karena itu, peristiwa terakhir di mana modifikasi$wp_styles
atau$wp_scripts
efek pada gaya dapat terjadi. dan skrip yang disertakan dalam dokumen.Jadi, mereka adalah acara di mana Anda bisa lebih percaya diri
$wp_styles
dan$wp_scripts
berisi skrip dan gaya yang secara efektif disertakan dalam dokumen.Jika Anda mendeklarasikan
$enqueued_scripts
dan$enqueued_styles
sebagai variabel global (atau cakupan valid lainnya, misalnya Anda dapat menyimpannya di properti metode), Anda bisa mengakses daftar skrip dan gaya dalam tindakan selanjutnya.Misalnya (hanya contoh cepat):
sumber
Jika Anda benar-benar ingin mendapatkan daftar semua gaya, Anda dapat menggunakan filter 'script_loader_tag' baru (Karena Versi 4.1).
"Wp_print_scripts" adalah:
yaitu tidak menunjukkan skrip di footer.
Referensi:
Tambahkan Tunda Atribut & Async ke Script WordPress
wp_print_scripts
sumber