Wp_LOCALIZE_SCRIPT可以在短码中使用吗?

时间:2017-08-21 作者:frumious

我正在开发一个插件,我想让数据可用于由我的一个短代码执行的客户端JS代码。wp_localize_script 这似乎是一种显而易见的方法,但对我来说并不适用:包含了我的脚本,但没有JS数据。数据取决于查询字符串中由短代码读取的值。我怀疑这与WP生命周期中脚本和短代码的相对计时有关。我有一些JS代码没有在一个短代码中使用,该代码很高兴使用wp_localize_script.

缩写插件文件:

function shortcode_orderitem() {

    $id = intval($_GET[\'id\']);
    $productData = retrieveSingleProductData($id);
    wp_localize_script(\'orderitem\', \'productData\', $productData); //THIS DOES NOT WORK
    return orderItem_buildHTML($productData);
}

function enqueue_general_scripts()
{
    wp_enqueue_script(\'orderitem\', plugin_dir_url(__FILE__) . \'client/orderitem.js\', [\'jquery\']);

    wp_enqueue_script(\'mainbag\', plugin_dir_url(__FILE__) . \'client/mainbag.js\', [\'jquery\']);
    $url = admin_url( \'admin-ajax.php\' );
    wp_localize_script(\'mainbag\', \'bagParams\', [\'url\' => $url]); //THIS WORKS
}

add_shortcode(\'orderitem\', "shortcode_orderitem");

add_action( \'wp_enqueue_scripts\', \'enqueue_general_scripts\' );
你不能使用wp_localize_script 直接在这样的短代码中?我错过了什么吗?有办法绕过它吗?提前感谢!

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

默认参数wp_enqueue_script 将在中输出脚本wp_head 作用当输出主要内容时,短代码通常会在稍后执行。

那样的话,打电话wp_localize_script 在短代码中,处理程序将没有效果,因为脚本已经输出。

设置$in_footer 参数到true 排队时,脚本将延迟脚本输出,直到wp_footer, 所以wp_localize_script 在这种情况下会成功。

结束