Как получить дескриптор $ для всех сценариев в очереди?

18

Есть ли какой-нибудь способ получить дескриптор $ для каждого сценария, который был поставлен в очередь?

Есть ли какой-нибудь массив, который содержит все дескрипторы, чтобы я мог проходить через него и что-то делать, используя каждый дескриптор $?

trusktr
источник

Ответы:

25

$wp_scriptsглобальная хранит все данные сценария:

function wpa54064_inspect_scripts() {
    global $wp_scripts;
    foreach( $wp_scripts->queue as $handle ) :
        echo $handle;
    endforeach;
}
add_action( 'wp_print_scripts', 'wpa54064_inspect_scripts' );
Milo
источник
5
Начиная с WP 4.2.0 - $wp_scripts = wp_scripts();может быть лучше, чем прямой доступ к глобалу, поскольку он будет инициализирован, $wp_scriptsесли он не был установлен.
jgraup
Вы должны добавить приоритет ,9999так же add_action( 'wp_print_scripts', wpa54064_inspect_scripts', 9999 );, иначе вы увидите сценарии, которые были исключены из файла functions.php
Ryszard Jędraszyk
2

Есть ли какой-нибудь способ получить дескриптор $ для каждого сценария, который был поставлен в очередь?

Вы можете попробовать выполнить проверку $wp_scripts->queueна конкретном хуке, но он не даст вам список всех дескрипторов, используемых WordPress, хотите верьте, хотите нет.

Например, вы можете подключиться wp_head, который запускает wp_print_scriptsдействие, чтобы получить список стандартной $handlesтемы Twenty Seventeen в WP v4.7.5:

function get_enqueued_scripts () {
    $scripts = wp_scripts();
    var_dump( array_keys( $scripts->groups ) );
}

add_action( 'wp_head', 'get_enqueued_scripts' );

И список $handlesиз $wp_scripts->groupsбудет выводить:

введите описание изображения здесь

На данный момент, если вам нужно сравнить то, что существует в $wp_scripts->queueвас, вы увидите только подмножество выше.

Поэтому даже wp_print_scripts не предоставит полный список дескрипторов, как показано выше, если это то, что вам нужно. И не всегда возможно полагаться на сгруппированные зависимости, чтобы получить их.

Джош Хабдас
источник