[英]php within js-file Wordpress
在.js文件中,我需要获取Wordpress主题的模板目录,即,我需要在js文件中获取<?php bloginfo('template_directory');?>
的返回值。
这个想法是这样的:
var blogTemplateDir = "<?php bloginfo('template_directory');?>";
如何做到这一点? 这样做的标准方法(Wordpress)是什么?
Wordpress提供了wp_localize_script()
函数,当您在Wordpress中注册PHP数组时,该函数可将PHP数组传递给.js文件。
它像这样工作
1)使用wp_register_script()向Wordpress注册脚本; 构建要发送到脚本的参数数组。
wp_enqueue_script('my-script','/path/to/script.js');
2)构建要发送到脚本的参数数组。
$params = array('foo' => 'bar','setting' => 123);
3)调用wp_localize_script()并给您的参数一个唯一的名称。
wp_localize_script( 'my-script', 'MyScriptParams', $params );
4)您可以按以下方式访问JavaScript中的变量:
<script>
alert(object_name.some_string);
</script>
注意:当您希望Wordpress在标头中包含JavaScript文件时,需要使用wp_enqueue_script()。
一起拉
<?php
$myPlugin = new MyPlugin();
//Add some JS to the admin section
add_action('admin_enqueue_scripts', array($myPlugin, 'adminJavaScript'));
class MyPlugin{
public function adminJavaScript() {
$settings = array(
'foo' => 'bar',
'setting' => 123
);
wp_register_script('myJavaScriptName', plugins_url('/myJavaScript.min.js', __FILE__));
wp_localize_script('myJavaScriptName', 'settings', $settings); //pass any php settings to javascript
wp_enqueue_script('myJavaScriptName'); //load the JavaScript file
}
}
?>
<script>
alert(settings.foo);
</script>
如Erik先前所述,JavaScript文件的文件扩展名没有意义,因为它最终都归结为内容。 在开发过程中遇到这种情况时,我发现需要将以下内容添加到所谓的JavaScript文件的顶部:
<?php
//Let's set the header straight
header('Content-type: text/javascript');
//Get the WP-specifics, so that we can use constants and what not
$home_dir = preg_replace('^wp-content/plugins/[a-z0-9\-/]+^', '', getcwd());
include($home_dir . 'wp-load.php');
?>
这样可以确保将定义放入JavaScript文件中,并且也可以将上面的示例与主题一起使用(只需确保将/plugins
更改为/themes
)即可。
javascript文件的文件扩展名没有意义。 您可以像使用HTML页面一样使用PHP输出JavaScript文件。 将JS文件包括为:
<script src="my_javascript_file.php"></script>
然后,您可以在JavaScript文件中使用问题的代码行:
var blogTemplateDir = "<?php bloginfo('template_directory');?>";
将.js包装在.php文件中,然后将其包含在您的上下文中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.