将PHP变量传递给javascript

时间:2013-04-18 作者:Sebastian Corneliu Vîrlan

是否有可能在javascript中传递一些PHP变量,以便稍后使用?

仅在中single.php.
我听说了wp_enqueue_scripts 但是,有必要声明JS文件的路径,但我不需要。

3 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

最佳实践方法wp_localize_script, 正是为了做到这一点。

但它确实需要以前使用wp_enqueue_scripts,因此您确实需要将JS移动到单独的文件中
当然,这几分钟的努力是值得的。

function wpse_96370_scripts()
{
    if ( is_single() ) {

        wp_register_script(
           \'your_script_handle\',
           get_template_directory_uri() . \'/js/your-script.js\',
           array( /* dependencies*/ ),
           1.0,
           true
       );

       wp_enqueue_script( \'your-script-handle\' );

       $script_params = array(
           /* examples */
           \'post\' => 99,
           \'users\' => array( 1, 20, 2049 )
       );

       wp_localize_script( \'your-script-handle\', \'scriptParams\', $script_params );

    }
}
add_action( \'wp_enqueue_scripts\', \'wpse_96370_scripts\' );
在JS中,您将能够使用传递的参数,如下所示:

var posts = scriptParams.post,
    secondUser = scriptParams.users[1]; /* index starts at 0 */

// iterate over users
for ( var i = 0; i < scriptParams.users.length; i++ ) {
    alert( scriptParams.users[i] );
}
根据您的评论[编辑]您的情况

我创建了一个新的db表response.id来自facebook api的。这是表:action\\u id、user\\u id、post\\u id、fb\\u id,其中fb\\u id是响应。来自facebook操作的id。然后是单曲。php我有一个按钮,如果我按下,我必须用api删除fb操作:FB.api(\'/\'+fb.response, \'delete\'); 哪里fb.response 应该是fb_id 从表中。

将以下主题/js/ 文件夹,如果不存在,请创建它
让我们调用文件fb-response.js:

jQuery( \'#button_id\' ).click( function() {
    FB.api( \'/\' + fbParams.id, \'delete\' );
});
然后如上所示进行注册、排队和本地化。假设你有你想要传递的身份$fb_id:

wp_register_script(
    \'fb-response\',
     get_template_directory_uri() . \'/js/fb-response.js\',
     array( \'jquery\' ),
     1.0,
     true
);

wp_enqueue_script( \'fb-response\' );

wp_localize_script( \'fb-response\', \'fbParams\', array( \'id\' => $fb_id ) );
注:显然,上述内容是假设这是一个主题。如果我们说的是“插件”,请相应地更改位置。

SO网友:tfrommen

阅读了您的评论后,我了解到您希望这样做:

// Do something to get the ID
$facebook_id = ...

// Create and print the button
echo \'<input onclick="FB.api(\'/\'+\'.$facebook_id.\', \'delete\')" />\';

SO网友:GWorking

https://developer.wordpress.org/reference/functions/wp_add_inline_script/ 现在应该是首选

编辑:从上面的文档:

function mytheme_enqueue_typekit() {
   wp_enqueue_script( \'mytheme-typekit\', \'https://use.typekit.net/.js\', array(), \'1.0\' );
   wp_add_inline_script( \'mytheme-typekit\', \'try{Typekit.load({ async: true });}catch(e){}\' );
}
add_action( \'wp_enqueue_scripts\', \'mytheme_enqueue_typekit\' );
因此,您首先将脚本排队,然后then 传递变量

然而,这段代码只生成以下内容

<script type="text/javascript" src="https://use.typekit.net/.js?ver=1.0"></script>
<script type="text/javascript"> try{Typekit.load({ async: true });}catch(e){} </script>
在我的例子中,我只需直接编写JavaScript代码(在模板中)并使用具有特定名称的全局JS变量(还没有找到更好的方法)(使用Timber,纯PHP应该是等效的)即可公开所需的数据

<script>
    my_global_variable.data1 = {{ custom_timber_function()|json_encode }}
</script>
$twig->addFunction(new Timber\\Twig_Function(\'custom_timber_function\', function () {
    return [
      \'theme\' => get_stylesheet_directory_uri(),
    ];
}));

结束

相关推荐

使用本地回退加载javascript CDN(非jQuery)

我正在尝试修改this 使用本地回退从CDN注册jQuery插件并将其排队。然而,当URL失败时(或者如果我给它一个假URL),Firebug在加载本地回退之前会收到2个对URL的中止调用。使用类似于链接的jQuery回退,它只接收1个中止的调用。看起来它在使用回退之前尝试加载脚本两次。function gavsiu_scripts() { if (is_single() && comments_open() && get_option(\'thread_com