Ich erstelle ein Plugin und möchte eine Liste aller Skripte und CSS erhalten, die von anderen Plugins verwendet werden.
Das ist meine Funktion:
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');
Ich möchte den zurückgegebenen Wert in einer Variablen erhalten.
Ich habe es versucht:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
Und das ist mein Ergebnis:
NULL
Wenn ich echo
in jeden schreibeforeach
Schleife , erhalte ich die richtigen Ergebnisse, aber wie speichere ich diese Werte in einer Variablen?
[bearbeiten]
Mein Code in einem Plugin, das auch nicht funktioniert
/**
* 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
quelle
quelle
do_action
gibt kein Ergebnis zurück, und außerdem hat die Aktion bereits stattgefunden, umwp_enqueue_scripts
... einfacher nur ein globales zu erstellen, z.global $crunchifyenqueued; $crunchifyenqueued = $result;
Rufen Sie dann in Ihrer späteren Funktion erneut das globale Element auf, um auf die Variable zuzugreifen.apply_filters
? Sie können leicht den Rückgabewert daraus erhalten.Antworten:
do_action
funktioniert so nicht ganz Wenn Siedo_action('crunchify_print_scripts_styles')
WP aufrufen, wird die Liste der registrierten Aktionen und Filter für alle an einen aufgerufenen Hook angehängten Aktionen angezeigt.crunchify_print_scripts_styles
Anschließend werden diese Funktionen ausgeführt.Und Sie möchten dies wahrscheinlich entfernen:
... weil Sie das Rückgabeergebnis Ihrer Funktion nicht erhalten können.
Auch wenn Sie diesen speziellen Hook verwenden, können Sie nicht garantieren, dass andere Funktionen keine weiteren Skripte oder Stile in die Warteschlange stellen, nachdem Sie Ihre Liste erstellt haben. Verwenden Sie einen Hook, der ausgelöst wird, nachdem alle Skripte und Stile in die Warteschlange gestellt wurden, z. B. wp_head, oder rufen Sie Ihre Funktion einfach in Ihrem Thema auf, wenn Sie das Ergebnis anzeigen möchten.
Es sollte funktionieren, wenn Sie Ihren Code so überarbeiten ...
Dann innerhalb Ihres Themas:
... zeigt Ihnen die Ergebnisse für das Debuggen, oder natürlich ...
... gibt Ihnen die Liste zum Manipulieren.
Wenn Sie es im Design aufrufen, stellen Sie sicher, dass Sie es aufrufen, nachdem alle Skripte und Stile in die Warteschlange gestellt wurden.
Um es von Ihrem Plugin aus aufzurufen, hängen Sie es an jeden Hook an, der später als wp_enqueue_scripts ausgeführt wird, wie wp_head, wie oben erwähnt:
quelle
$all_the_scripts_and_styles = crunchify_print_scripts_styles();
in dein Plugin! Die Antwort wurde angepasst.global wp_scripts
global wp_styles
völlig leer zu sein. Aber sie arbeiten mit einemdo_action or apply_filters
wp_enqueue_scripts
ursprünglich empfohlen auf?Sie könnten nutzen
wp_print_scripts
undwp_print_styles
Maßnahmen rechtzeitig und richtig Zugriff auf die Warteschlange eingereiht Skripte und Stile, wie diese Aktionen die letzten Ereignisse vor Skripts und Stile werden in dem Dokument und aus diesem Grund enthalten, die letzte Veranstaltung , bei der Änderungen an$wp_styles
oder$wp_scripts
Auswirkungen auf Arten haben könnte und Skripte im Dokument enthalten.Also, sie sind die Veranstaltungen , bei denen Sie mehr vertrauen können , dass
$wp_styles
und$wp_scripts
die Skripte enthalten und Stile effektiv in das Dokument aufgenommen.Wenn Sie
$enqueued_scripts
adn deklarieren$enqueued_styles
als globale Variablen (oder einen anderen gültigen Bereich, der beispielsweise in der Eigenschaft einer Methode gespeichert werden kann), können Sie in einer späteren Aktion auf die Liste der Skripte und Stile zugreifen.Zum Beispiel (nur ein kurzes Beispiel):
quelle
Wenn Sie wirklich eine Liste aller Stile erhalten möchten , können Sie den neuen Filter 'script_loader_tag' (seit Version 4.1) verwenden.
Das "wp_print_scripts" ist:
dh es werden keine Skripte in der Fußzeile angezeigt.
Verweise:
Hinzufügen von Defer & Async-Attributen zu WordPress-Skripten
wp_print_scripts
quelle