Javascript wp_从短代码多次本地化_脚本
我有一个短代码[tips],在这个短代码中,我最后要做的是:Javascript wp_从短代码多次本地化_脚本,javascript,wordpress,shortcode,Javascript,Wordpress,Shortcode,我有一个短代码[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对象 现在它
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=[{…},{…},{…},{…},…]代码>短代码函数中可能有一个静态计数器,如下所示:
短代码声明将向JS数组添加提示:
add_shortcode( 'tips', function ( $atts, $content = null, $shortcode ) {
static $count = 0;
# https://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php
$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' ) );
});
具有多个短代码的页面如下所示:
[tips]one[/tips]
[tips]two[/tips]
[tips]and three[/tips]
浏览器控制台上的结果:
那么您必须首先收集数据,而不是在处理单个短代码时输出数据。。。由于您不知道在什么时候处理页面包含的最后一个这样的短代码,因此您必须在之后输出收集的数据。这是关键。我希望在短代码中包含wp_enqueue_脚本,因此我只将脚本文件嵌入实际使用它的页面。然后我需要修改短代码中的全局PHP变量,并在检查脚本是否排队后,以某种方式将其用于wp_localize_脚本。如果您有单独的短代码解析器函数来收集数组中的数据,那么最后您所要做的就是检查该数组是否包含任何条目-如果没有,那么当前页面上就没有任何这种类型的SC,因此您也不会输出脚本。问题是,在哪里存储数据?因为每个对短代码解析器的单独调用,以及最后处理它的函数都需要能够访问它-所以要么是全局的(而不是全局的),或者将其存储到会话中。(然后您需要找到一个运行得很早的钩子,首先在会话中“null”该数组-否则您将从用户访问的上一页中获取数据。)
[tips]one[/tips]
[tips]two[/tips]
[tips]and three[/tips]