我将根据米洛上面的回答提交一个答案,以帮助任何人在将来找到这个答案。我只想放一些简单的例子来说明这一点,但这不是经过测试的代码。
在我的示例中,我有一个接受Flickr photoset ID的库的快捷码,例如[flickr_gallery photoset_id="12345"]
. 同一页上可以有多个此库实例,每个实例都需要使用唯一的ID进行初始化。
在设置短代码的PHP中,我有一个画廊ID的全局数组——每次呈现短代码时,它都会将唯一的画廊ID添加到数组中。然后,脚本只会排队一次,并且有一个库ID数组,我们可以在JavaScript中循环使用。
$gallery_ids = array();
function render_flickr_gallery_shortcode($atts = [], $content = null) {
// typical shortcode stuff...
global $gallery_ids;
$gallery_ids[] = $atts[\'gallery_id\'];
// localize previously registered script with array of gallery IDs
wp_localize_script(\'some-javascript\', \'gallery_settings\', array(
\'gallery_ids\' => $gallery_ids
));
wp_enqueue_script(\'some-javascript\');
}
add_shortcode(\'flickr_gallery\', \'render_flickr_gallery_shortcode\');
然后在从短代码排队的JavaScript文件中:
jQuery(document).ready(function($) {
var options = (typeof gallery_settings !== \'undefined\') ? gallery_settings : null;
if (options && options.gallery_ids.length > 0) {
for (var i = 0; i < options.gallery_ids.length; i++) {
var galleryID = options.gallery_ids[i];
$("#ff-" + galleryID).flexslider({
animation : "slide",
animationLoop : true,
controlNav : false,
slideshow : true,
pauseOnHover : true,
smoothHeight : true
});
}
}
});