2015-06-21 94 views
0

我试图在我的wordpress插件中将我的PHP变量放到JS文件中。遵循蛋糕配方,代码如下代码片段。使用wp_localize_script函数将变量从PHP传递到Javascript

* PHP *

$someone = 'whatever'; 

function admin_script_style($hook) { 
    global $post_type; 
    wp_register_script('my_scripts', plugins_url('', __FILE__) .'/js/' . 'scripts.js', array('jquery'), '1.0', true); 
    wp_enqueue_script('my_scripts'); 
    wp_localize_script('my_scripts', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php'), 'my_var' => 'foo')); 
} 
add_action('admin_enqueue_scripts', 'admin_script_style'); 

这工作得很好,但是,如果我改变 “my_var” 为PHP变量,像

wp_localize_script('prd_scripts_edicoes', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php'), 'my_var' => $someone)); 

这失败,我的javascrip返回“my_var =空值”。

任何人都可以帮助我吗?

回答

0

问题是$someone不在你的函数范围内。

你可以将它导入范围,宣称它作为全球然后访问它:

global $someone; 
$someone = 'whatever'; 

function admin_script_style($hook) { 
    global $someone; 
    // $someone is now accessible 
    ... 
} 

需要注意的是,你不已经来声明一个变量为全局,当你设置它,如果你已经在全球范围内。为了明确起见,我希望总是将变量声明为全局变量,如果我打算在子范围内访问变量。

或者,而不是用你的钩子命名功能,你可以通过一个封闭到add_action并宣布$someone为使用的变量:

$someone = 'whatever'; 
add_action('admin_enqueue_scripts', function($hook) use($someone) { 
    // $someone is now accessible 
    ... 
}); 
+0

非常感谢! –