You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中wp_localize_script()使用问题:PHP变量无法传递到JS

WordPress PHP变量本地化到JS的问题解决方法

问题场景

开发WordPress插件时,已通过wp_enqueue_scripts()入队句柄为my_script的JS文件,但在后台子菜单页面my_page.php中调用wp_localize_script传递动态计数器值后,JS控制台提示my_js_object未定义。

核心原因

wp_localize_script必须在目标脚本入队之后、页面输出之前执行。直接在子菜单页面中调用该函数,大概率是脚本已经完成输出,导致本地化变量无法被注入到JS中。另外,后台页面的脚本入队应该使用admin_enqueue_scripts钩子而非前台的wp_enqueue_scripts。

正确配置步骤

1. 调整脚本入队与本地化的时机(修改functions.php)

将脚本入队和变量本地化逻辑统一放到admin_enqueue_scripts钩子中,并通过页面标识判断是否仅在目标子菜单页面执行:

add_action('admin_enqueue_scripts', 'enqueue_my_admin_scripts');
function enqueue_my_admin_scripts($hook_suffix) {
    // 替换为你的子菜单页面实际hook后缀,可临时在my_page.php中echo $GLOBALS['hook_suffix']获取
    if ($hook_suffix !== 'your-plugin-slug_page_my_page') {
        return;
    }

    // 入队JS脚本,替换为实际的文件路径
    wp_enqueue_script(
        'my_script',
        plugin_dir_url(__FILE__) . 'assets/js/my_script.js',
        array('jquery'), // 若依赖jQuery则添加,否则留空数组
        '1.0.0',
        true // 放在页面底部加载,优化性能
    );

    // 本地化PHP变量到JS
    $my_counter = get_my_count();
    $ajax_url = admin_url('admin-ajax.php'); // 标准WP AJAX地址
    wp_localize_script(
        'my_script',
        'my_js_object',
        array(
            'ajax_url' => $ajax_url,
            'my_counter' => $my_counter
        )
    );
}

2. 移除子菜单页面中的本地化代码

删除my_page.php里的wp_localize_script相关代码,避免重复或时机错误的调用。

3. 确保JS代码执行时机正确

修改my_script.js,确保在DOM加载完成后再访问本地化变量,避免因脚本加载顺序问题导致未定义:

document.addEventListener('DOMContentLoaded', function() {
    console.log(my_js_object.my_counter);
});

关键注意事项

  • 确认$hook_suffix的准确性:每个后台页面都有唯一的hook后缀,必须匹配才能仅在目标页面加载脚本和变量。
  • 句柄名称严格一致:wp_localize_script的第一个参数必须和wp_enqueue_script的句柄完全相同(大小写敏感)。
  • 依赖项正确设置:如果JS依赖其他脚本(如jQuery),入队时必须在第三个参数中声明,保证加载顺序。

内容的提问来源于stack exchange,提问作者apostopal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:52:17