web-dev-qa-db-fra.com

plugins_url () ne renvoie pas correctement le répertoire wp-include

Je doute qu'il y ait un problème avec plugins_url() mais c'est un comportement étrange que je constate.

J'ai le suivant dans un plugin activé

function include_masonry() {
  wp_enqueue_script( 'masonry', plugins_url('js/masonry.min.js', __FILE__), array(), '3.2.1', true );
  wp_enqueue_script( 'my_init_script', plugins_url('js/my_init_script.js', __FILE__), array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'include_masonry' );

Je suis arrivé à cela après avoir utilisé get_template_directory_uri() mais j'ai décidé de ne pas le faire car je veux que tous les plug-ins pertinents soient dans le dossier du plugin.

Ceci est la sortie dans le pied de page:

<script type='text/javascript' src='http://example.com/wp-includes/js/masonry.min.js?ver=3.1.2'></script>
<script type='text/javascript' src='http://example.com/wp-content/plugins/myplugin/js/my_init_script.js?ver=1.0.0'></script>

La seconde va bien mais la première a 2 erreurs.

1) Pourquoi est-ce ?ver=3.1.2 quand j'ai spécifié 3.2.1? Ce n'est pas une faute de frappe.

2) Pourquoi ne charge-t-on pas masonry.min.js à partir du dossier du plugin!? plugins_url() semble renvoyer ce que get_template_directory_uri() renvoie, mais uniquement pour masonry.min.js. J'ai durement rafraîchi, supprimé le fichier de plug-in, reuploaded, échangé les lignes wp_enqueue_script, et il pointe toujours vers le mauvais répertoire avec le mauvais paramètre de version.

1
Archonic

La maçonnerie est déjà enregistrée par WordPress.

De wp-includes/script-loader.php:

// Masonry v2 depended on jQuery. v3 does not. The older jquery-masonry handle is a shiv.
// It sets jQuery as a dependency, as the theme may have been implicitly loading it this way.
$scripts->add( 'masonry', "/wp-includes/js/masonry.min.js", array(), '3.1.2', 1 );
$scripts->add( 'jquery-masonry', "/wp-includes/js/jquery/jquery.masonry$dev_suffix.js", array( 'jquery', 'masonry' ), '3.1.2', 1 );

Donc, votre première wp_enqueue_script() n'enregistre pas à nouveau la maçonnerie. WordPress utilise la ressource déjà existante. plugins_url() n'est pas lié, sa valeur n'est même pas utilisée.

1
fuxia