web-dev-qa-db-fra.com

Est-il possible de lire ou de lister le contenu de wp_head ()?

Je travaille sur un compilateur CSS et JS et j'ai besoin de trouver un moyen de lister le contenu de wp_head()

J'essaie d'obtenir une liste de tous les fichiers CSS/JS et CSS en ligne sur une page donnée.

Accrocher l'action wp_head ne fait rien

J'espérais que quelque chose comme ça marcherait

function head_content($list){

    print_r($list);


}

add_action('wp_head', 'head_content');

toute aide est appréciée.

METTRE À JOUR:

a quelque chose qui fonctionne

function head_content($list){

    print_r($list);

    return $list;

}

add_filter('print_styles_array', 'head_content');
add_filter('print_script_array', 'head_content');

ceci répertorie tous les fichiers css/js

3
Benn

Je voulais chercher et remplacer dans l'en-tête, mais ni les réponses @majick ni @Samuel Elh ne fonctionnaient directement pour moi. Donc, en combinant leurs réponses, j'ai eu ce qui a finalement fonctionné:

function start_wp_head_buffer() {
    ob_start();
}
add_action('wp_head','start_wp_head_buffer',0);

function end_wp_head_buffer() {
    $in = ob_get_clean();

    // here do whatever you want with the header code
    echo $in; // output the result unless you want to remove it
}
add_action('wp_head','end_wp_head_buffer', PHP_INT_MAX); //PHP_INT_MAX will ensure this action is called after all other actions that can modify head

Il a été ajouté au functions.php de mon thème enfant.

2
Putnik

La solution simple consiste à écouter wp_head dans une fonction personnalisée, comme le fait WordPress dans wp-includes/general-template.php pour la fonction wp_head().

Je veux dire quelque chose comme:

function head_content() {
    ob_start();
    do_action('wp_head');
    return ob_get_clean();
}
// contents
var_dump( head_content() );

Plus tard, utilisez regex ou un autre outil pour filtrer le contenu que vous ciblez.

J'espère que cela pourra aider.

3
Samuel Elh

Vous pouvez mettre en tampon la sortie wp_head en y ajoutant des actions d'encapsuleur:

add_action('wp_head','start_wp_head_buffer',0);
function start_wp_head_buffer() {ob_start;}
add_action('wp_head','end_wp_head_buffer',99);
function end_wp_head_buffer() {global $wpheadcontents; $wpheadcontents = ob_get_flush();}

Vous pouvez ensuite appeler global $wpheadcontents; ailleurs pour accéder au contenu et le traiter.

Mais, dans ce cas, il peut être plus simple de simplement obtenir les informations que vous recherchez directement à partir des variables globales $wp_styles et $wp_scripts.

add_action('wp_enqueue_scripts','print_global_arrays',999);
    global $wp_styles, $wp_scripts;
    echo "Styles Array:"; print_r($wp_styles);
    echo "Scripts Array:"; print_r($wp_scripts);
}
2
majick