使用wp_localize_script函数将变量从PHP传递到Javascript

时间:2015-06-21 21:20:21

标签: ajax wordpress wordpress-plugin

我试图将我的PHP变量放入我的wordpress插件中的JS文件中。按照蛋糕配方,下面的代码为代码。

* 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' );

这很好,但是,如果我为PHP变量更改“my_var”,比如

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

这失败了,我的javascrip返回“my_var = null”。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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
    ...
});