是否有可能在javascript中传递一些PHP变量,以便稍后使用?
仅在中single.php
.
我听说了wp_enqueue_scripts
但是,有必要声明JS文件的路径,但我不需要。
是否有可能在javascript中传递一些PHP变量,以便稍后使用?
仅在中single.php
.
我听说了wp_enqueue_scripts
但是,有必要声明JS文件的路径,但我不需要。
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 ) );
注:显然,上述内容是假设这是一个主题。如果我们说的是“插件”,请相应地更改位置。阅读了您的评论后,我了解到您希望这样做:
// Do something to get the ID
$facebook_id = ...
// Create and print the button
echo \'<input onclick="FB.api(\'/\'+\'.$facebook_id.\', \'delete\')" />\';
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(),
];
}));
我正在尝试修改this 使用本地回退从CDN注册jQuery插件并将其排队。然而,当URL失败时(或者如果我给它一个假URL),Firebug在加载本地回退之前会收到2个对URL的中止调用。使用类似于链接的jQuery回退,它只接收1个中止的调用。看起来它在使用回退之前尝试加载脚本两次。function gavsiu_scripts() { if (is_single() && comments_open() && get_option(\'thread_com