首页 > 解决方案 > WordPress wp_localize_script:JS脚本无法识别PHP变量

问题描述

我正在尝试通过我的子主题在我的 WordPress中修改脚本( ajaxcalls.js )。我在子主题( ajaxcalls_child.js)中创建了该文件的副本。

我在function.php文件中添加了以下代码,以便将旧 JS 文件出列,将新文件入队并传递ajaxcalls_varsajaxcalls_child.js 使用的变量:

<?php

//made sure here that the action execute after all the other scripts are loaded
add_action('wp_enqueue_scripts', 'wpestate_load_child_scripts', 100);

function wpestate_load_child_scripts() {
    wp_dequeue_script('wpestate_ajaxcalls');

    wp_enqueue_script('ajaxcalls_child', get_stylesheet_directory_uri().'/js/ajaxcalls_child.js', array('jquery'),'1.0', true);

    wp_localize_script(‘ajaxcalls_child’, ‘ajaxcalls_vars’, array(
        'contact_name'     =>  esc_html__( 'Your Name','wprentals'),
        'contact_email'    =>  esc_html__( 'Your Email','wprentals'),
        'contact_phone'    =>  esc_html__( 'Your Phone','wprentals'),
        'contact_comment'  =>  esc_html__( 'Your Message','wprentals'),
        'adv_contact_name' =>  esc_html__( 'Your Name','wprentals'),
        'adv_email'        =>  esc_html__( 'Your Email','wprentals'),
        'adv_phone'        =>  esc_html__( 'Your Phone','wprentals'),
        'adv_comment'      =>  esc_html__( 'Your Message','wprentals'),
        'adv_search'       =>  esc_html__( 'Send Message','wprentals'),
        'admin_url'        =>  get_admin_url(),
        'login_redirect'   =>  $login_redirect,
        'login_loading'    =>  esc_html__( 'Sending user info, please wait...','wprentals'),
        'userid'           =>  $userID,
        'prop_featured'    =>  esc_html__( 'Property is featured','wprentals'),
        'no_prop_featured' =>  esc_html__( 'You have used all the "Featured" listings in your package.','wprentals'),
        'favorite'         =>  esc_html__( 'Favorite','wprentals').'<i class="fas fa-heart"></i>',
        'add_favorite'     =>  esc_html__( 'Add to Favorites','wprentals'),
        'remove_favorite'  =>  esc_html__( 'remove from favorites','wprentals'),
        'add_favorite_unit'=>  esc_html__( 'add to favorites','wprentals'),
        'saving'           =>  esc_html__( 'saving..','wprentals'),
        'sending'          =>  esc_html__( 'sending message..','wprentals'),
        'reserve'          =>  esc_html__( 'Reserve Period','wprentals'),
        'paypal'           =>  esc_html__( 'Connecting to Paypal! Please wait...','wprentals'),
        'stripecancel'     =>  esc_html__( 'subscription will be cancelled at the end of the current period','wprentals'),
        'max_month_no'     =>  intval   ( get_option('wp_estate_month_no_show','') ),
        'processing'       =>  esc_html__( 'processing..','wprentals'),
        'home'             =>  get_site_url(),
        'delete_account'   =>  esc_html__('Confirm your ACCOUNT DELETION request! Clicking the button below will result your account data will be deleted. This means you will no longer be able to login to your account and access your account information: My Profile, My Reservations, My bookings, Invoices. This operation CAN NOT BE REVERSED!','wprentals'),
        'adv_search_what_half' =>  $adv_search_what_half,
        'adv_search_how_half'  =>  $adv_search_how_half,
        'adv_search_type'      =>  $adv_search_type
    ));
}

现在,在我访问我的网站后,我可以看到旧脚本已被新脚本替换,但我可以在 chrome 控制台上看到,只要新脚本中的函数需要它,ajaxcalls_vars 就没有定义。

chrome控制台上的错误

chrome控制台上的错误

所以新脚本在那里,但我的变量ajaxcalls_vars没有根据ajaxcalls_child.js定义,因此,我认为我尝试将该变量传递给新脚本的方式有问题。

在查看了类似的问题之后,我理解了其他类型的错误,并尝试将该代码改进到我上面分享的那个。但仍然无法正确处理。

标签: javascriptphpwordpresswordpress-theming

解决方案


您在前 2 个参数周围的单wp_localize_script(‘ajaxcalls_child’, ‘ajaxcalls_vars’, array(...引号不是真正的单引号。尝试删除它们并用'字符替换wp_localize_script('ajaxcalls_child', 'ajaxcalls_vars', array(... 一旦我这样做了,该对象就可以在入队脚本中使用(在 xampp wp 5.0 上测试)


推荐阅读