Tôi đang tạo một plugin và tôi muốn lấy danh sách tất cả các tập lệnh và CSS được sử dụng bởi các plugin khác.
Đây là chức năng của tôi:
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');
Tôi muốn nhận được giá trị trả về bên trong một biến.
Tôi đã thử điều này:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
Và đây là kết quả của tôi:
NULL
Nếu tôi viết echo
bên trong mỗi foreach
vòng lặp, tôi sẽ nhận được kết quả chính xác, nhưng làm thế nào để lưu trữ các giá trị này bên trong một biến?
[biên tập]
Mã của tôi bên trong một plugin không hoạt động quá
/**
* 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' );
apply_filters
? bạn có thể dễ dàng nhận được giá trị trả về từ đó.
do_action
không trả về kết quả, và bên cạnh đó, hành động đã diễn ra tạiwp_enqueue_scripts
... dễ dàng hơn chỉ để tạo ra một toàn cầu, ví dụ.global $crunchifyenqueued; $crunchifyenqueued = $result;
sau đó một lần nữa gọi toàn cầu trong hàm sau của bạn để truy cập vào biến.