在包含PHP的脚本上使用wp_enQueue_script

时间:2016-01-31 作者:Michae Pavlos Michael

我正在一个WooCommerce网站上工作,我的所有jQuery都在脚本标记的页脚中。我使用PHP筛选出任何特定页面所需的脚本。

但是,我想使用建议的使用wp\\u enqueue\\u脚本加载jquery的方法。问题是,除非我使用wp_localize_script, 哪种方法有效。。。。主要地

我在函数中调用排队。php使用wp\\u enqueue\\u脚本挂钩,但在注册脚本时,某些php变量不可用。有些全局变量是,但当我尝试通过访问它们时,我的一些自定义变量是空的,这些自定义变量是在下面定义的localize_script.

我希望这有点道理?如果是这样,我将如何正确地进行这项工作?

例如,假设一些PHP变量是在特定的页面模板中定义的。如果我使用上面提到的钩子将脚本排队,则无法访问这些变量。如何将能够访问页面上定义的所有PHP变量的脚本排入队列?

实际代码有点复杂,所以我会尽量简化:-

在我的功能中。php我有以下内容:-

function wp_enqueue_woocommerce_style(){

    $array = array(
        "var1" => <?php echo $var1 ?>,
        "var2" => <?php echo $var2 ?>
      );

    wp_register_script(\'chroma_js\', get_template_directory_uri() . \'/js/chroma.js\', \'\', \'1.1\', TRUE);
    wp_enqueue_script(\'chroma_js\');
    wp_localize_script( "chroma_js", "php_vars", $array);

}

add_action( \'wp_enqueue_scripts\', \'wp_enqueue_woocommerce_style\',99 );
将我的脚本排入页脚。然而,这两个PHP变量是在我挂接到“woocommerce\\u before\\u single\\u product”的函数中定义的。当我尝试访问var1时(&A);var2在我的脚本中,它们没有定义。调用排队时已经定义的所有PHP变量都可以正常工作。因此,我不知道如何将这些变量传递给排队的脚本。

3 个回复
最合适的回答,由SO网友:Milo 整理而成

如果要在页脚中输出脚本,可以调用wp_localize_script 在脚本排队之后但在脚本输出之前的任何时间点wp_footer 优先级20。

function wp_enqueue_woocommerce_style(){
    wp_enqueue_script(
        \'chroma_js\',
        get_template_directory_uri() . \'/js/chroma.js\',
        \'\',
        \'1.1\',
        true
    );
}
add_action( \'wp_enqueue_scripts\', \'wp_enqueue_woocommerce_style\' );

function wp_localize_woocommerce_style(){
    $array = array(
        \'var1\' => $var1,
        \'var2\' => $var2
    );
    wp_localize_script( \'chroma_js\', \'php_vars\', $array );
}
add_action( \'wp_footer\', \'wp_localize_woocommerce_style\', 0 );

SO网友:Vasim Shaikh

<?php

// Register the script
wp_register_script( \'some_handle\', \'path/to/myscript.js\' );

// Localize the script with new data
$translation_array = array(
    \'some_string\' => __( \'Some string to translate\', \'plugin-domain\' ),
    \'a_value\' => \'10\'
);
wp_localize_script( \'some_handle\', \'object_name\', $translation_array );

// Enqueued script with localized data.
wp_enqueue_script( \'some_handle\' );
您可以访问JavaScript中的变量,如下所示:

<script>
// alerts \'Some string to translate\'
alert( object_name.some_string);
</script> 
Note: The data in the resulting JavaScript call will be passed as text (see ticket #25280). If you are trying to pass integers you will need to call the JavaScript parseInt() function.

<script>
// Call a function that needs an int.
FinalZoom = map.getBoundsZoomLevel( bounds ) - parseInt( object_name.a_value, 10 ); 
</script>

SO网友:Vasim Shaikh

我最近使用这段代码来获取标题图像路径中的变量。将此函数添加到函数中。php:

function img()
{
    return get_template_directory_uri().\'/assets/img/\';
}
并在标题中使用此选项。php如下所示:

<img src="<?php echo img(); ?>my-image.jpg">

相关推荐