将PHP变量传递给javascript


13

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

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


你是什么劲歌通过以后,和你在哪里要使用的变量(相对于在PHP变量)?当然,您可以通过PHP回显/打印JavaScript代码,从而插入PHP变量值。但这不是您想要的...
tfrommen 2013年

我用来自Facebook api的一些response.id创建了一个新的数据库表。这是表格:action_id,user_id,post_id,fb_id,其中fb_id是来自Facebook操作的response.id。然后在single.php中,我有一个按钮,如果按该按钮,则必须使用api删除fb操作:FB.api('/'+ fb.response,'delete'); 其中fb.response应该是表中的fb_id。
塞巴斯蒂安·科妮柳

Answers:


18

最佳实践方法

看一下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] );
}

[编辑]您的情况

根据您的评论

我用response.idfacebook api中的一些创建了一个新的db表。这是表格:action_id,user_id,post_id,fb_id,其中fb_id是来自Facebook操作的response.id。然后在single.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' );
});

然后如上所示进行注册,排队和定位。假设您具有要传递的ID,那么说$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 ) );

注意:显然,以上假设是主题。如果我们在谈论“插件”,请相应地更改位置。


在这方面,我有些初学者,所以我尝试将其实现到我的wordpress:papermashup.com/jquery-iphone-style-ajax-switch。如您所见,有一个js文件和几行js代码放入用法文件中。或者我可以把那几行代码放在另一个文件上?
Sebastian CorneliuVîrlan'13

因此,对于任何小的javascript操作,我都应该创建一个文件?如果有空,可以在skype上添加sebyku17吗?
Sebastian CorneliuVîrlan'13

这取决于您要执行的操作,要执行的操作,等等。通常:不,您不必使用外部JS文件。但是,如果您愿意的话,可以将任何内容放入一个文件中。如果您具有多种功能,则无需多个文件。但是,你已经接受了这个(恕我直言相当复杂,你的情况略有矫枉过正之类的)答案-而不必完全理解,因为我把它。没有冒犯,@约翰内斯。;)
tfrommen 2013年

1
没有采取,@ tf。到目前为止,这可能是过分的矫kill过正,但是对于他的代码来说,一方面可能会增长,另一方面,最初的问题是复数形式的“变量”。您的答案同样有效,因此我+1。
Johannes Pille

2
wp_localize_script是用于将PHP值传递到Javascript文件的非常少用且功能强大的函数。令人惊讶的是,实际上并没有多少人知道Wordpress中的这一强大功能。
Dwayne Charrington

1

阅读您的评论后,我了解您想执行以下操作:

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

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

不,这是我正在工作的页面:funny-videoro.com/the-dark-knight-rises-trailer-oficial。如果您愿意,可以登录该网站。然后,您将看到一个jQuery ios样式按钮。当我滑到关闭位置时,必须使用fb api删除帖子。帖子ID在数据库中。
塞巴斯蒂安·科妮柳

好吧,这基本上就是我在回答中写的内容。从数据库中检索ID并将其存储在变量中。然后直接将其打印到您的一行JavaScript函数调用中。在<input ... />它的功能是仅用于演示目的。据我了解您,一切都满足您的需求。如果不是,请尝试解释更多信息,但是要在您的问题中而不是在评论中。
tfrommen

我不想在同一行中使用php和js代码,在wordpress中有一些自动功能...
塞巴斯蒂安·科妮柳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.