Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript wp_从短代码多次本地化_脚本_Javascript_Wordpress_Shortcode - Fatal编程技术网

Javascript wp_从短代码多次本地化_脚本

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对象 现在它

我有一个短代码[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=[{…},{…},{…},{…},…]

短代码函数中可能有一个静态计数器,如下所示:

短代码声明将向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]