Estou criando um plug-in e desejo obter a lista de todos os scripts e CSS usados por outros plug-ins.
Esta é a minha função:
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');
Eu quero obter o valor retornado dentro de uma variável.
Eu tentei isso:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
E este é o meu resultado:
NULL
Se eu escrever echo
dentro de cada foreach
loop, obtenho os resultados corretos, mas como armazenar esses valores dentro de uma variável?
[editar]
Meu código dentro de um pluginm que não está funcionando muito
/**
* 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
fonte
fonte
do_action
não retorna um resultado e, além disso, a ação já ocorreu emwp_enqueue_scripts
... mais fácil apenas para criar um global, por exemplo.global $crunchifyenqueued; $crunchifyenqueued = $result;
em seguida, chame novamente o global em sua função posterior para acessar a variável.apply_filters
então? você pode facilmente obter o valor de retorno disso.Respostas:
do_action
não funciona bem assim. Quando você liga, odo_action('crunchify_print_scripts_styles')
WP examina sua lista de ações e filtros registrados para qualquer um que esteja anexado a um gancho chamadocrunchify_print_scripts_styles
e executa essas funções.E você provavelmente deseja remover isso:
... porque você não é capaz de obter o resultado de retorno de sua função.
Além disso, quando você usa esse gancho específico, não pode garantir que outras funções não enfileirem mais scripts ou estilos depois de gerar sua lista. Use um gancho que é acionado após todos os scripts e estilos terem sido enfileirados, como wp_head, por conveniência, ou melhor ainda, basta chamar sua função dentro do seu tema quando desejar exibir o resultado.
Retrabalhar seu código dessa maneira deve funcionar ...
Então, dentro do seu tema:
... mostrará os resultados da depuração ou, é claro ...
... lhe dará a lista para manipular.
A chamada no tema garante que você o chame após todos os scripts e estilos serem enfileirados.
Para chamá-lo a partir do seu plug-in, anexe-o a qualquer gancho que seja executado depois de wp_enqueue_scripts, como wp_head, como mencionei acima:
fonte
$all_the_scripts_and_styles = crunchify_print_scripts_styles();
dentro do seu plugin! Ajustou a resposta para se adequar.global wp_scripts
global wp_styles
estão totalmente vazios. Mas eles trabalham com umdo_action or apply_filters
wp_enqueue_scripts
ação, como eu recomendei originalmente?Você pode usar
wp_print_scripts
ewp_print_styles
ações para acessar oportuna e adequadamente scripts e estilos enfileirados, pois essas são os últimos eventos antes da inclusão de scripts e estilos no documento e, por isso, o último evento em que modificações$wp_styles
ou$wp_scripts
podem ter efeito sobre estilos e scripts incluídos no documento.Portanto, são os eventos em que você pode ter mais confiança
$wp_styles
e$wp_scripts
conter os scripts e estilos efetivamente incluídos no documento.Se você declarar
$enqueued_scripts
adn$enqueued_styles
como variáveis globais (ou qualquer outro escopo válido, por exemplo, poderá armazená-lo na propriedade de um método), poderá acessar a lista de scripts e estilos em uma ação posterior.Por exemplo (apenas um exemplo rápido):
fonte
Se você realmente deseja obter uma lista de todos os estilos, pode usar o novo filtro 'script_loader_tag' (desde a versão 4.1).
O "wp_print_scripts" é:
isto é, não mostra scripts no rodapé.
Referências:
Adicionar Atributos Adiados e Assíncronos aos Scripts do WordPress
wp_print_scripts
fonte