web-dev-qa-db-fra.com

Un style possible est-il possible de retirer le fichier d'attente/supprimer du hook wp_footer () et d'ajouter un hook wp_head ()?

J'ai besoin d'annuler l'enregistrement de ce style de mise en file d'attente du crochet wp_footer () et de l'ajouter au sommet du site avec le crochet wp_head (), c'est possible?

J'optimise mon thème pour le valider dans le W3C, et l'une des exigences du W3C est que tous les styles figurent dans la balise <head></head>... J'utilise un plugin spécifique appelé Crayon Syntax Highlighter, et ce plugin insère un style au bas de la page (utilisant probablement le crochet wp_footer()).

Le nom/id du script est crayon:  enter image description here 

J'ai essayé toutes ces fonctions mais sans succès:

wp_deregister_style( 'crayon' );
wp_dequeue_style( 'crayon' );
remove_action( 'wp_enqueue_style' , 'crayon' , 10 );

wp_deregister_style( 'crayon-css' );
wp_dequeue_style( 'crayon-css' );
remove_action( 'wp_enqueue_style' , 'crayon-css' , 10 );
1
rafaelfndev

Si vous regardez le code source , vous pouvez voir que wp_enqueue_style( 'crayon' ) est appelé dans Crayon::enqueue_resources(), lui-même appelé soit à partir de Crayon::the_content() ou de Crayon::wp_head(). Le code dans Crayon::wp_head est:

if (!CrayonGlobalSettings::val(CrayonSettings::EFFICIENT_ENQUEUE) || CrayonGlobalSettings::val(CrayonSettings::TAG_EDITOR_FRONT)) {
  CrayonLog::debug('head: force enqueue');
  // Efficient enqueuing disabled, always load despite enqueuing or not in the_post
  self::enqueue_resources();
}

Ce qui mettra le style en file d'attente seulement lorsque certains paramètres seront activés. Sinon, le style ne sera mis en file d'attente que depuis le filtre the_content qui se déclenche après que wp_head a déjà été généré.

Donc, vos deux options sont:

  1. Avoir la CSS mise en file d'attente sur toutes les pages de l'en-tête
  2. Avez le CSS mis en file d'attente uniquement sur les pages nécessaires mais dans le pied de page
3
Nathan Johnson

Hmmmm .. la question n'est pas très claire pour moi, si vous pouviez fournir un peu plus d'informations sur votre problème (comme les fichiers spécifiques et les scripts que vous devez modifier), ce serait génial. D'après ce que j'ai compris, je vais essayer de vous aider. Premièrement, évitez les plugins sauf si vous en avez vraiment besoin. Maintenant, vous essayez peut-être de déplacer du code et du code JavaScript bloquant le rendu hors de la balise, car lorsque vous commencez à charger une page via votre navigateur, les premiers scripts que vous téléchargez sont ceux entre balises, en les déplaçant vers votre pied de page ( footer.php ou /public_html/wp-content/themes/yourtheme/footer.php), la page Web commencera à restituer toutes les données devant être visualisées en commençant par le haut de la page et enfin les scripts du pied de page. fichier .php. Je parie que Crayon Syntax Highlighter est la cause du problème, essayez simplement de mettre ce <!-- W3TC-include-js-head --> avant la balise de fermeture </body>.

Si vous voulez utiliser wp_enqueue_scripts, regardez cet exemple

function themeslug_enqueue_style() {
    wp_enqueue_style( 'core', 'style.css', false ); 
}

function themeslug_enqueue_script() {
    wp_enqueue_script( 'my-js', 'filename.js', false );
}

add_action( 'wp_enqueue_scripts', 'themeslug_enqueue_style' );
add_action( 'wp_enqueue_scripts', 'themeslug_enqueue_script' );

J'espère que cela aide, bonne chance mec. :)

1
JakeDD