wp_localize_script 多次来自简码
wp_localize_script multiple times from Shortcode
我有一个简码 [提示] 最后我在做:
wp_enqueue_script( "tips", plugins_url( "/tips/js/tips.js", PATH ), array("jquery"), TIPS_VERSION, true );
wp_localize_script( "tips", "objTips", $objTips );
如果同一页面上有多个 [tips] 简码,我想传递一个 objTips
对象,其中包含该页面所有简码的 $objTips
数据。
现在它正在输出 var objTips = {...}
两次(或更多次),所以 JavaScript 文件 tips.js 只识别最后一个。我希望它像 var objTips = [{...},{...},{...},...];
可以在短代码函数中使用静态计数器,如下所示:Count how many times shortcode is called and display different content in each « WordPress.org Forums。
短代码声明会将提示添加到 JS 数组:
add_shortcode( 'tips', function ( $atts, $content = null, $shortcode ) {
static $count = 0;
#
$return = <<<JS
<script>
objTips[$count] = "$content";
</script>
JS;
$count++;
return $return;
});
add_action( 'wp_enqueue_scripts', function() {
wp_enqueue_script( 'tips-script', plugin_dir_url( __FILE__ ) . '/tips.js', array( 'jquery' ) );
});
排队的 JS 文件将初始化该数组并在文档加载时显示最终结果:
var objTips = [];
jQuery( document ).ready( function( $ ) {
console.log(objTips);
});
包含多个短代码的页面如下所示:
[tips]one[/tips]
[tips]two[/tips]
[tips]and three[/tips]
浏览器控制台上的结果:
简短回答:是的,多个本地化脚本在同一个脚本句柄上工作。我们已经在我们的插件中这样做了。
我有一个简码 [提示] 最后我在做:
wp_enqueue_script( "tips", plugins_url( "/tips/js/tips.js", PATH ), array("jquery"), TIPS_VERSION, true );
wp_localize_script( "tips", "objTips", $objTips );
如果同一页面上有多个 [tips] 简码,我想传递一个 objTips
对象,其中包含该页面所有简码的 $objTips
数据。
现在它正在输出 var objTips = {...}
两次(或更多次),所以 JavaScript 文件 tips.js 只识别最后一个。我希望它像 var objTips = [{...},{...},{...},...];
可以在短代码函数中使用静态计数器,如下所示:Count how many times shortcode is called and display different content in each « WordPress.org Forums。
短代码声明会将提示添加到 JS 数组:
add_shortcode( 'tips', function ( $atts, $content = null, $shortcode ) {
static $count = 0;
#
$return = <<<JS
<script>
objTips[$count] = "$content";
</script>
JS;
$count++;
return $return;
});
add_action( 'wp_enqueue_scripts', function() {
wp_enqueue_script( 'tips-script', plugin_dir_url( __FILE__ ) . '/tips.js', array( 'jquery' ) );
});
排队的 JS 文件将初始化该数组并在文档加载时显示最终结果:
var objTips = [];
jQuery( document ).ready( function( $ ) {
console.log(objTips);
});
包含多个短代码的页面如下所示:
[tips]one[/tips]
[tips]two[/tips]
[tips]and three[/tips]
浏览器控制台上的结果:
简短回答:是的,多个本地化脚本在同一个脚本句柄上工作。我们已经在我们的插件中这样做了。