WordPress中PHP Notice: WP_Scripts::localize调用错误修复求助
修复WP_Scripts::localize调用错误的方案
问题根源
- 参数类型不符合要求:
wp_localize_script强制要求第三个参数为关联数组,但你的代码直接传入了get_option返回的单个值(大概率是布尔值true/false),触发参数错误提示。 - 调用时机错误:在短码函数内部调用
wp_localize_script,短码执行时机通常晚于脚本输出阶段,导致函数调用时脚本未完成注册/排队,触发调用逻辑错误。
具体修复步骤
步骤1:修正wp_localize_script的参数格式
将单个值包装为关联数组,满足函数参数要求:
// 原错误代码 wp_localize_script('catalog-all-js', 'catalog_disable_right_click', get_option('product_catalog_disable_right_click')); // 修改后代码 wp_localize_script('catalog-all-js', 'catalog_disable_right_click', array( 'disable' => get_option('product_catalog_disable_right_click', false) ));
修改后前端可通过catalog_disable_right_click.disable获取开关值。
步骤2:调整调用时机,移出短码函数
短码仅负责内容渲染,脚本本地化操作需放到wp_enqueue_scripts钩子中执行,确保脚本已完成注册/排队。
清理短码函数中的错误调用
移除两个短码函数内的wp_localize_script代码,修改后的短码函数如下:
第一个短码函数:
function origincode_products_list_shotrcode($atts) { extract(shortcode_atts(array( 'id' => 'no origin_code catalog', ), $atts)); return origincode_products_list($atts['id']); } add_shortcode('origin_code_catalog', 'origincode_products_list_shotrcode');
第二个短码函数:
function origin_code_catalog_single_product_shotrcode($atts) { extract(shortcode_atts(array( 'id' => 'no origin_code catalog', ), $atts)); return origin_code_catalog_single_product($atts['id']); } add_shortcode('origin_code_catalog_single_product', 'origin_code_catalog_single_product_shotrcode');
添加脚本本地化的钩子函数
在插件文件的合适位置(如插件主文件开头)添加以下代码:
function catalog_enqueue_localize_scripts() { // 先验证目标脚本是否已注册/排队 if (wp_script_is('catalog-all-js', 'registered') || wp_script_is('catalog-all-js', 'enqueued')) { wp_localize_script('catalog-all-js', 'catalog_disable_right_click', array( 'disable' => get_option('product_catalog_disable_right_click', false) )); } } add_action('wp_enqueue_scripts', 'catalog_enqueue_localize_scripts');
步骤3:同步调整前端JS逻辑(可选)
如果原插件JS代码直接使用catalog_disable_right_click变量,需同步修改为catalog_disable_right_click.disable,确保功能正常运行。
额外适配说明
若catalog-all-js是在短码触发时才排队的脚本,可将钩子优先级设为11,确保本地化操作在脚本排队后执行:
add_action('wp_enqueue_scripts', 'catalog_enqueue_localize_scripts', 11);
内容的提问来源于stack exchange,提问作者NewPal
相关产品推荐
相关产品推荐

