Tworzę wtyczkę i chcę uzyskać listę wszystkich skryptów i CSS używanych przez inne wtyczki.
To moja funkcja:
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');
Chcę uzyskać zwróconą wartość w zmiennej.
Próbowałem tego:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
A to mój wynik:
NULL
Jeśli piszę echo
w każdej foreach
pętli, otrzymuję prawidłowe wyniki, ale jak przechowywać te wartości w zmiennej?
[edytować]
Mój kod wewnątrz wtyczki, która również nie działa
/**
* 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
źródło
źródło
do_action
nie zwraca wyniku, a poza tym akcja już się odbyła wwp_enqueue_scripts
... łatwiej po prostu stworzyć globalny, np.global $crunchifyenqueued; $crunchifyenqueued = $result;
następnie ponownie wywołaj globalny w późniejszej funkcji, aby uzyskać dostęp do zmiennej.apply_filters
? z tego można łatwo uzyskać wartość zwrotną.Odpowiedzi:
do_action
nie całkiem tak działa. Po wywołaniudo_action('crunchify_print_scripts_styles')
WP patrzy na listę zarejestrowanych akcji i filtrów dla tych, które są podłączone do wywoływanego haka,crunchify_print_scripts_styles
a następnie uruchamia te funkcje.I prawdopodobnie chcesz to usunąć:
... ponieważ nie możesz uzyskać wyniku zwracanego przez twoją funkcję.
Również podczas korzystania z tego konkretnego haka nie można zagwarantować, że inne funkcje nie będą kolejkować kolejnych skryptów ani stylów po wygenerowaniu listy. Użyj haka, który uruchamia się po kolejkowaniu wszystkich skryptów i stylów, takich jak wp_head, dla wygody, lub lepiej po prostu wywołaj swoją funkcję w motywie, gdy chcesz wyświetlić wynik.
Przeróbka kodu w ten sposób powinna działać ...
Następnie w swoim motywie:
... pokaże wyniki debugowania lub oczywiście ...
... da ci listę do manipulacji.
Wywołanie go w kompozycji gwarantuje, że będzie ono wywoływane po kolejkowaniu wszystkich skryptów i stylów.
Aby wywołać go ze swojej wtyczki, dołącz go do dowolnego haka, który działa później niż wp_enqueue_scripts, jak wp_head, jak wspomniałem powyżej:
źródło
$all_the_scripts_and_styles = crunchify_print_scripts_styles();
wtyczkę! Poprawiono odpowiedź, aby dopasować.global wp_scripts
global wp_styles
są całkowicie puste. Ale pracują zdo_action or apply_filters
wp_enqueue_scripts
akcja, jak pierwotnie zalecałem?Możesz użyć
wp_print_scripts
iwp_print_styles
akcji, aby na czas i odpowiednio uzyskać dostęp do kolejkowanych skryptów i stylów, ponieważ te akcje są ostatnimi zdarzeniami, zanim skrypty i style zostaną uwzględnione w dokumencie, a zatem ostatnie zdarzenie, w którym modyfikacje stylów$wp_styles
lub$wp_scripts
mogą mieć wpływ na style oraz skrypty zawarte w dokumencie.Tak, są zdarzenia, gdzie można być bardziej pewni, że
$wp_styles
i$wp_scripts
zawierać skrypty i style skutecznie zawarte w dokumencie.Jeśli zadeklarujesz
$enqueued_scripts
adn$enqueued_styles
jako zmienne globalne (lub inny prawidłowy zakres, na przykład możesz zapisać go we właściwości metody), możesz uzyskać dostęp do listy skryptów i stylów w późniejszym działaniu.Na przykład (tylko szybki przykład):
źródło
Jeśli naprawdę chcesz uzyskać listę wszystkich stylów, możesz użyć nowego filtru „script_loader_tag” (od wersji 4.1).
„Wp_print_scripts” to:
tzn. nie pokazuje skryptów w stopce.
Bibliografia:
Dodaj atrybuty odroczenia i asynchronizacji do skryptów WordPress
wp_print_scripts
źródło