在.js文件中,我需要获取Wordpress主题的模板目录,即我需要在js文件中获得<?php bloginfo('template_directory');?>
的返回值。
这个想法是这样的:
var blogTemplateDir = "<?php bloginfo('template_directory');?>";
如何实现这一目标?这样做的标准(Wordpress)方式是什么?
答案 0 :(得分:12)
Wordpress提供了一个wp_localize_script()
函数,允许您在使用Wordpress注册时将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>
答案 1 :(得分:4)
正如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
)。
答案 2 :(得分:3)
javascript文件的文件扩展名没有意义。您可以像使用HTML页面一样使用PHP输出您的javascript文件。将JS文件包含为:
<script src="my_javascript_file.php"></script>
然后您可以在javascript文件中使用问题中的行:
var blogTemplateDir = "<?php bloginfo('template_directory');?>";
答案 3 :(得分:1)
将.js包装在.php文件中,并将其包含在您的上下文中。