js脚本文件中的WordPress路径url

IT技术 javascript wordpress wordpress-theming
2021-03-01 21:04:17

我添加了自定义脚本:

wp_enqueue_script('functions', get_bloginfo('template_url') . '/js/functions.js', 'search', null, false);

它工作得很好,除了functions.js我有:

Reset.style.background = "url('../images/searchfield_clear.png') no-repeat top left";

这曾经有效,直到我改为漂亮的永久链接和 .htaccess

文件夹层次结构如下:

themename/js themename/images (图像和js文件夹在themename文件夹中)

我试过 ../images - ./image - /images

通常它应该在 js 文件所在的任何地方返回 1 级......

我不想使用完整路径。

WordPress 是否可以通过另一种方式识别 javascript 文件中的正确路径?

目前我只是很困惑我做错了什么。

5个回答

根据 Wordpress 文档,您应该wp_localize_script()在您的 functions.php 文件中使用。这将在标头中创建一个 Javascript 对象,该对象在运行时可用于您的脚本。

法典

例子:

<?php wp_localize_script('mylib', 'WPURLS', array( 'siteurl' => get_option('siteurl') )); ?>

要在 Javascript 中访问此变量,您只需执行以下操作:

<script type="text/javascript">
    var url = WPURLS.siteurl;
</script>
>wp_add_inline_script()是在 WP v4.5 中引入的,现在是该用例的最佳 > 实践。wp_localize_script()应该只在您真正想要本地化字符串时使用 >。
2021-04-30 21:04:17
如果您还展示了如何在 JavaScript 中获取变量,那就太好了。我知道它在链接中显示了如何,但它会提供更完整的答案。
2021-05-12 21:04:17
也许还应该提到文档中的这个注释:重要! wp_localize_script()必须在使用注册脚本调用wp_register_script()wp_enqueue_script()
2021-05-17 21:04:17

您可以通过在模板的标题中设置一个 JS 变量来避免对完整路径进行硬编码,在wp_head()调用之前,保存模板 URL。喜欢:

<script type="text/javascript">
var templateUrl = '<?= get_bloginfo("template_url"); ?>';
</script>

并使用该变量来设置背景(我知道您知道如何执行此操作,我只包含这些详细信息,以防它们对其他人有帮助):

Reset.style.background = " url('"+templateUrl+"/images/searchfield_clear.png') ";
<?php bloginfo("template_directory"); ?>并且 'url(' + templateUrl + '/images/path-to-image.png)'会调整这个孩子了。
2021-04-27 21:04:17
我发现这篇文章很有用。帮助我实施wp_localize_script()
2021-05-10 21:04:17
有什么理由说明这在 2014 年不起作用吗?除了<?php奇怪的报价风格?
2021-05-11 21:04:17
这个解决方案工作正常,但在大多数情况下,克里斯的回答更可取——我不知道 wp_localize_script() 的存在。
2021-05-14 21:04:17
    wp_register_script('custom-js',WP_PLUGIN_URL.'/PLUGIN_NAME/js/custom.js',array(),NULL,true);
    wp_enqueue_script('custom-js');

    $wnm_custom = array( 'template_url' => get_bloginfo('template_url') );
    wp_localize_script( 'custom-js', 'wnm_custom', $wnm_custom );

并在 custom.js

alert(wnm_custom.template_url);
这绝对是最好和最简单的方法!谢谢!
2021-04-27 21:04:17
我知道这是一篇旧帖子,但要获取子主题 URL,请使用“get_stylesheet_directory_uri()”而不是“get_bloginfo('template_url')”。
2021-05-09 21:04:17

如果 javascript 文件是从管理仪表板加载的,则此 javascript 函数将为您提供 WordPress 安装的根目录。当我构建需要从管理仪表板发出 ajax 请求的插件时,我经常使用它。

function getHomeUrl() {
  var href = window.location.href;
  var index = href.indexOf('/wp-admin');
  var homeUrl = href.substring(0, index);
  return homeUrl;
}
我可以在从插件文件设置的主题的functions.php 中获取本地化变量吗?
2021-04-23 21:04:17

对于使用 Genesis 框架的用户。

将以下内容添加到您的子主题 functions.php

add_action( 'genesis_before', 'script_urls' );

function script_urls() {
?>
    <script type="text/javascript">
     var stylesheetDir = '<?= get_bloginfo("stylesheet_directory"); ?>';
    </script>
<?php
}

并使用该变量在脚本中设置相对 url。例如:

Reset.style.background = " url('"+stylesheetDir+"/images/searchfield_clear.png') ";