使用wp_enQueue_script/style的正确方式是什么?

时间:2011-05-15 作者:Sam

首先,让我告诉你我现在是怎么做的。我有这个功能。它的目的是获取文件系统路径的字符串(/root/web/dir/some/path/to/file)并返回等效的URL(http://mydomain.com/some/path/to/file)。为了使此功能正常工作,它需要知道root web directory (RWD)在系统上。它通过将$\\u SERVER[\'DOCUMENT\\u ROOT\']假设为RWD来实现这一点。

function path_to_url($path)
{
    $path = str_replace(\'\\\\\', \'/\', $path);
    $doc_root = str_replace(\'\\\\\', \'/\', $_SERVER[\'DOCUMENT_ROOT\']);

    return \'http://\'.$_SERVER[\'HTTP_HOST\'].\'/\'.str_replace(\' \', \'%20\', str_replace($doc_root, \'\', $path));
}
请学习这个函数并了解它的作用,以便理解我在这篇文章中所说的内容。

有了这个函数,我只需要知道它的路径,就可以在页面上包含脚本/样式表。我将编写类似以下内容的代码:

wp_enqueue_script(\'myscript\', path_to_url(dirname(__FILE__).\'/script.js\'));
这很好,事实上,它工作得非常好,以至于我开始在主题的很多地方使用path\\u to\\u url。

在某些情况下,此解决方案不起作用的原因之一。一些共享托管站点(bluehost)没有像我预期的那样将$\\u SERVER[\'DOCUMENT\\u ROOT\']设置为RWD,并且假设它是这样的。Bluehost似乎总是将其设置为“/usr/local/apache/htdocs”,这与我在PHP中使用的路径不相关--“/home1/demo/public\\html/wp-content/themes/…”。因此,我必须解决那些最不幸将$\\u SERVER[\'DOCUMENT\\u ROOT\']设置为如上所述的不正确(至少据我所知似乎不正确)的人,或者我应该找出另一种方法来做我想要/需要做的事情。

解决方案是以某种方式更正$\\u服务器[\'DOCUMENT\\u ROOT\'。但对于我的客户来说,这似乎不是一个有效的解决方案。他们需要提交一份支持票,通知我我的主题不起作用。然后我需要回复一条消息,说明他们如何解决这个问题。但在我可以简单地回答他们一个解决方案之前,我需要知道他们的RWD。这将是一个非常繁琐的解决方案,需要更多的时间和精力,然后看起来很实用。

所以我剩下第二个解决方案——找出另一种方法来做我需要做的事情。在写这篇文章的时候,我想我可以采用硬编码的方法,也许这是解决这个问题的唯一方法。

wp_enqueue_script(\'script\', get_bloginfo(\'template_url\').\'/lib/framework/panel/script.js\');
经过我所有的解释,这似乎是一个不需要动脑筋的问题。但我唯一的不满是它有多僵硬。例如,如果我决定移动脚本。js文件,我将需要编辑此代码,无论发生什么。我喜欢上面的path\\u to\\u url解决方案的地方是,如果我移动了脚本。js和php模板文件,没有任何中断;只要是剧本。js文件与php模板文件位于同一文件夹中。事实上,我对path\\u to\\u url解决方案所做的是使事情再次相对化,相对于php模板文件!

不幸的是,我意识到,期望有一个公式可以将所有系统上的文件系统路径转换为URL是不现实的。这是因为存在不同的服务器配置,使得一个公式不可能知道路径中的RWD。例如,一台服务器可以安装wordpresshttp://example.com/~demo/ RWD应该是/home1/demo/public\\u html/。因此,我无法通过这种设置获得\\uu FILE\\uuuu的RWD。我怎么可能?

我希望你觉得这个帖子/问题很有趣。我将留给你一个问题:我怎样才能wp_enqueue_script(\'script\', get_bloginfo(\'template_url\') . \'/lib/framework/panel/script.js\'); 相对性更强,刚性更低?

谢谢各位。和平

1 个回复
SO网友:ZaMoose

在你的职能范围内做这件事。php:

define(\'PATH_TO_URL\', get_bloginfo(\'template_url\') . [path to your libraries, etc.]);

那就打电话吧wp_enqueue_script(\'script\', PATH_TO_URL . \'myscript.js\'); 或者任何你想要的地方。如果更改位置,只需更改define(),它就会到处更新。

简单的豌豆。

结束

相关推荐

如何使用“Feed JSON”插件修复这些PHP警告?

使用WordPress插件时,我收到以下PHP警告”Feed JSON“.有人能告诉我怎么修理吗?”?警告:为/mypath/wp-content/plugins/feed-json/feed-json模板中的foreach()提供的参数无效。php第39行警告:无法修改标题信息-标题已由/mypath/wp-content/plugins/feed-json/feed-json-template.php:39中的/mypath/wp-content/plugins/feed-json/feed-json