J'aimerai implémenter quelques-unes des fonctionnalités du modèle standard dans l'une de mes instances WordPress.
J'essaie de comprendre comment échanger les appels réguliers jQuery ci-dessous
<script type='text/javascript' src='http:/.../wp-includes/js/jquery/jquery.js?ver=1.4.4'></script>
<script type='text/javascript' src='http://.../wp-includes/js/jquery/ui.core.js?ver=1.8.9'></script>
pour ça:
<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if necessary -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
<script>window.jQuery || document.write("<script src='js/libs/jquery-1.5.1.min.js'>\x3C/script>")</script>
Vous devriez charger jQuery avec wp_enqueue_script('jquery')
- de cette façon, vous ne vous retrouverez pas avec plusieurs instances si les plugins essaient de le charger aussi.
Pour utiliser Google CDN, placez-le dans votre functions.php
;
wp_deregister_script( 'jquery' );
wp_register_script(
'jquery',
'https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js',
null, // Dependencies - none
null // Version - use null to prevent WP adding version argument "?ver" in URL
);
Mise à jour: Personnellement, et je sais que cela ressemble à une échappatoire, mais je ne me soucierais pas de vérifier le CDN. Google est tellement fiable, et il est plus que probable qu'il soit déjà dans la mémoire cache du navigateur de l'utilisateur (de nombreux sites utilisent donc le CDN de Google).
Cependant , dans mon devoir de répondre, vous avez l'une des deux options;
Le problème avec 2) est que vous devez injecter ce script juste après jQuery, et avant tout autre plugin qui en dépend, lance ses scripts. Le seul moyen de le savoir, c’est d’écouter jQuery, puis de générer le code JavaScript lors du prochain appel.
La magie? Déposez ceci dans votre functions.php
;
/**
* Print fallback script right after jQuery is printed from queue.
*
* @param string $src
* @return string
*/
function wpse_12448_fallback_jquery( $src, $handle = null ) {
static $run_next = false;
if ( $run_next ) {
// Defaults to WP bundled jQuery, but you should use your own that
// matches the version loaded via CDN.
$local = includes_url( 'js/jquery/jquery.js' );
echo <<<JS
<script>window.jQuery || document.write( '<script src="$local"></script>' );</script>
JS;
$run_next = false;
}
if ( $handle === 'jquery' )
$run_next = true;
return $src;
}
add_action( 'wp_head', 'wpse_12448_fallback_jquery', 2 );
if ( ! is_admin() )
add_filter( 'script_loader_src', 'wpse_12448_fallback_jquery', 10, 2 );
Pour ceux qui sont au courant, ceci est également lié à wp_head
juste après que wp_print_scripts
se soit déclenché, au cas où il n'y aurait plus de scripts à imprimer après jquery
(la fonction fonctionne sur l'appel next plutôt que le par exemple, il est appelé avec jQuery).
Pour Wordpress 4.5.0 + : wp_add_inline_script()
#
function jquery_enqueue_with_fallback() {
wp_deregister_script( 'jquery' );
wp_register_script( 'jquery' , '//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js', false, '3.1.1', true );
wp_add_inline_script( 'jquery', 'window.jQuery||document.write(\'<script src="'.esc_url(get_template_directory_uri()).'/libs/js/jquery.js"><\/script>\')' );
wp_enqueue_script( 'jquery' );
}
add_action( 'wp_enqueue_scripts' , 'jquery_enqueue_with_fallback' );
Remarque: _ Modifie la version et votre propre source jQuery locale.
Deux choses à garder à l'esprit à propos de cette réponse:
`` `
add_action( 'init', function(){
//Only act if in admin
if ( ! is_admin()) {
//set protocol dynamically
if( is_ssl() ){
$protocol = 'https';
}else {
$protocol = 'http';
}
/** @var WP_Scripts $wp_scripts */
global $wp_scripts;
/** @var _WP_Dependency $core */
$core = $wp_scripts->registered[ 'jquery-core' ];
$core_version = $core->ver;
$core->src = "$protocol://ajax.googleapis.com/ajax/libs/jquery/$core_version/jquery.min.js";
///Use jQuery migrate if WP_DEBUG
if ( WP_DEBUG ) {
/** @var _WP_Dependency $migrate */
$migrate = $wp_scripts->registered[ 'jquery-migrate' ];
$migrate_version = $migrate->ver;
$migrate->src = "$protocol://cdn.jsdelivr.net/jquery.migrate/$migrate_version/jquery-migrate.min.js";
}else{
/** @var _WP_Dependency $jquery */
$jquery = $wp_scripts->registered[ 'jquery' ];
$jquery->deps = [ 'jquery-core' ];
}
}
}, 11 );
`` `
Notez que j'utilise toujours le système de gestion des dépendances de WordPress. En outre, définit HTTPS vs HTTP à l'aide de is_ssl()
pour éviter les erreurs de contenu mixte et permet à WordPress de dicter le numéro de version.