Un plugin sur lequel je travaille nécessite le chargement de jquery avant que le contenu ne soit traité. Certains thèmes d'actions, tels que 2010, 2011 et 2012 (je crois) mettent le JS dans le pied de page.
Comment puis-je forcer le chargement des scripts dans l'en-tête (je préviendrai les utilisateurs du plug-in que celui-ci en a besoin)?
Le comportement normal de wp_enqueue_script
consiste à placer la sortie du script dans la section head, le paramètre $in_footer
est facultatif et la valeur par défaut est false
. Donc, vous pouvez charger jQuery avec votre plugin dans la tête et, si vous traitez avec des thèmes/plugins bien programmés, il ne se rechargera pas, car wp_enqueue_script
l’empêche par défaut - des informations supplémentaires à ce sujet ici .
Le troisième paramètre de wp_enqueue_script () vous permet de déclarer des dépendances pour le script que vous mettez en file d'attente, c'est-à-dire quels autres scripts sont requis pour leur exécution.
add_action( 'wp_enqueue_scripts', 'include_script_that_depends_on_jquery' );
function include_script_that_depends_on_jquery() {
wp_enqueue_script( 'my_script.js', '/path/to/my_scripts.js', array( 'jquery' ) );
}
Ainsi, quel que soit le thème, le plug-in ou le chargement de votre requête, votre script se chargera toujours plus tard, à condition de respecter également les meilleures pratiques et de ne pas le désenregistrer.
Par exemple, si je voulais un simple jQuery ("body"). Css ("background-color", "red"); exécuté depuis un shortcode dans le corps, je ne peux pas le faire. Disons que mon code court est [couleur du corps = rouge] mais que jquery n'est chargé que jusqu'au pied de page, mon code ne fonctionnera pas.
Dans votre gestionnaire de shortcode, vous pouvez renvoyer un élément de substitution HTML ou une variable JavaScript, puis vous connecter à wp_footer
avec une autre fonction qui "exécute" jQuery.
function wpse_139154_shortcode( $atts ) {
// Awesome code
wp_enqueue_script( 'jquery' ); // Will output in the footer if not already in the head
add_action( 'wp_footer', 'wpse_139154_shortcode_script', 100 ); // Ensure we run after wp_print_footer_scripts
return <<<html
<script>
var arguments = arguments || {}; arguments.backgroundColor = "{$atts['color']}";
</script>
html;
}
function wpse_139154_shortcode_script() {
echo <<<html
<script>jQuery( "body" ).css( arguments );</script>
html;
}
Conforme au WP Référence pour wp_enqueue_scripts
wp_enqueue_script( string $handle, string $src = false, array $deps = array(), string|bool|null $ver = false, bool $in_footer = false )
Le dernier paramètre est responsable de l'endroit où le script sera chargé. Il y a des chicots qui peuvent changer son comportement! Essayez de trouver et commenter/supprimer ces lignes de votre fichier function.php
remove_action('wp_head', 'wp_print_scripts');
remove_action('wp_head', 'wp_print_head_scripts', 9);
remove_action('wp_head', 'wp_enqueue_scripts', 1);
add_action('wp_footer', 'wp_print_scripts', 5);
add_action('wp_footer', 'wp_enqueue_scripts', 5);
add_action('wp_footer', 'wp_print_head_scripts', 5);
Le but de ces six actions est de déplacer automatiquement le code JavaScript vers le pied de page, ce qui rend le dernier paramètre de wp_enqueue_scripts inutile! Si ces actions ne peuvent pas être supprimées, vous pouvez en modifier les priorités. De 5 à 9999 par exemple. Jouez avec les priorités pour trouver celle qui vous convient.
Vous devez également vérifier si certaines dépendances sont spécifiées dans le tableau $ deps.Witch gone force le script à charger après sa résolution.
N'essayez pas de hacks sales, c'est une mauvaise pratique
Code heureux