我从默认的2017主题创建了一个子主题。我正在函数上加载一个javascript文件。php使用:
wp_enqueue_script(\'testpage\', get_stylesheet_directory_uri() . \'/js/testscript.js\', array(\'jquery\'), \'\', true);
然后在这个javascript文件上,我尝试使用load a。json使用
jQuery.getJSON
. 这个json文件与位于同一目录中。js文件。因为我使用
get_stylesheet_directory_uri()
, 我由此推测了当前的路径。js将是它位于主题内的路径?但显然情况并非如此。如果我尝试加载。json使用到同一目录的相对路径,然后我得到一个404。
jQuery.getJSON("mydata.json")
will 404因为它实际上www.mysite.com/js/mydata.json
而不是在www.mysite.com/wp-content/themes/twentyseventeen-child/js/mydata.json
所以我用jQuery.getJSON("/wp-content/themes/twentyseventeen-child/js/mydata.json")
目前,这很好用。
但恐怕这样做不是一种好的做法?像JS文件中那样对整个主题路径进行硬编码是不好的,因为该目录可以根据安装情况而更改,对吗?那么,有没有办法获得当前的主题路径?类似get_stylesheet_directory_uri()
在PHP中?或者也许有其他完全可以避免这个问题的方法?或者这一点问题都没有,我就可以保持这样?
最合适的回答,由SO网友:Shibi 整理而成
您可以使用wp_localize_script
在文件之前传递带有要加载的url的对象。然后在文件中你可以像这样使用它testpage_obj.json_data
wp_register_script(\'testpage\', get_stylesheet_directory_uri() . \'/js/testscript.js\', array(\'jquery\'), \'\', true);
wp_localize_script( \'testpage\', \'testpage_obj\', array(
\'json_data\' => get_stylesheet_directory_uri() . \'/js/mydata.json\'
) );
wp_enqueue_script(\'testpage\');
在JS文件中
jQuery.getJSON(testpage_obj.json_data)