WordPress中的相对URL

时间:2013-06-19 09:16:37

标签: wordpress

我总是觉得在WordPress中使用绝对URL而不是相对URL将图像,文件,链接等插入到WordPress中令人沮丧。相对URL更便于切换域名,在http和https等之间切换。今天我发现如果你用相对url定义WP_CONTENT_URL,那么当你将文件插入帖子时,他们使用src的相对url而不是绝对url 。正是我一直想要的!但是官方的WordPress文档说如果要定义WP_CONTENT_URL,则应该使用完整URI

WordPress codex says

  

将WP_CONTENT_URL设置为此目录的完整URI (无尾随)   斜线),例如

define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');

当我使用相对URL时,一切似乎都能正常工作,例如

define( 'WP_CONTENT_URL', '/my-content-folder');

但是使用相对URI有问题吗?我只是认为WordPress必须有理由说明它应该用完整的URI定义。

9 个答案:

答案 0 :(得分:57)

我认为这只是一个核心开发人员可以/应该回答的问题。我研究并找到了核心票#17048:URLs delivered to the browser should be root-relative。我们可以在哪里找到主要核心开发人员Andrew Nacin解释的原因。他还链接到this [wp-hackers] thread。在这两个链接上,这些是WP不使用相对URL的关键引号:

核心票证:

  
      
  • 根相对网址并不合适。 /path/可能不是WordPress,它可能不在安装之中。所以它与绝对URL没什么不同。

  •   
  • 移动安装时,任何相对URL也会使执行转换变得更加困难。在大多数情况下,find-replace是必要的,并且由于这些原因,拥有绝对URL具有讽刺意义的可移植性。

  •   
  • 许多其他地方都需要绝对网址。需要有条件地添加这些将增加处理,以及引入潜在的错误(以及与插件的不兼容性)。

  •   

[wp-hackers]帖子

  
      
  • 相对于什么,我不确定,因为WordPress经常在子目录中,这意味着我们将   总是需要处理内容然后添加到路径的其余部分。这个   介绍了开销。

  •   
  • 请记住,有两种类型的相对URL,有和没有   领先的斜线。两者都有警告,这使得这不可能正常   实施

  •   
  • WordPress应该(并且确实)存储绝对URL。这个   不需要预处理内容,不需要开销,也不需要歧义。如果你   需要重新定位,它是数据库中的全局查找替换。

  •   

而且,就个人而言,我不止一次发现主题和插件编码错误,只有在定义WP_CONTENT_URL时才会中断。
他们 不知道 这可以设置并假设这是真的: WP.URL / wp-content / WhatEver ,它不是总是如此。有些事情会在这个过程中发生。


插件Relative URLs(在edse's Answer中关联),在wp_make_link_relative中应用函数series of filters in the action hook template_redirect。这是一个非常简单的代码,似乎是一个不错的选择。

答案 1 :(得分:11)

<?php wp_make_link_relative( $link ) ?>

  

将完整的URL路径转换为相对路径。

     

删除http或https协议和域。保持路径'/'在开头,因此它不是真正的相对链接,而是来自Web根目录。

     

参考:Wordpress Codex

答案 2 :(得分:5)

我同意Rup。我想主要原因是避免相对路径上的混淆。我认为wordpress可以从头开始使用相对路径,但是当使用多个插件时,可能会出现问题,如何配置主题等。

在处理测试服务器时,我曾经将这个插件用于相对路径:

  

Root Relative URLs
  将所有URL转换为根目录相对URL,以便在多个IP上托管相同的站点,更轻松的生产迁移和更好的移动设备测试。

答案 3 :(得分:0)

我在我的网站上解决了这个问题,并在functions.php

中进行了解决
add_action("template_redirect", "start_buffer");
add_action("shutdown", "end_buffer", 999);

function filter_buffer($buffer) {
    $buffer = replace_insecure_links($buffer);
    return $buffer;
}
function start_buffer(){
    ob_start("filter_buffer");
}

function end_buffer(){
    if (ob_get_length()) ob_end_flush();
}

function replace_insecure_links($str) {

   $str = str_replace ( array("http://www.yoursite.com/", "https://www.yoursite.com/") , array("/", "/"), $str);

   return apply_filters("rsssl_fixer_output", $str);

}

我参与了一个插件,将其切成碎片然后制作。 它取代了我网站上的所有链接(菜单,CSS,脚本等),一切正常。

答案 4 :(得分:0)

在设置=>媒体下,有一个“文件的完整URL路径”选项。如果将其设置为默认媒体目录路径'/ wp-content / uploads'而不是空白,它将插入相对路径,例如'/wp-content/uploads/2020/06/document.pdf'。

我不确定是否所有链接都是相对的,例如张贴,但至少它处理媒体,这可能是大多数人担心的问题。

答案 5 :(得分:0)

我一直只使用 get_site_url()。例如:

<img src="<?=get_site_url(); ?>/wp-content/uploads/2021/05/right-arrow-white@2x.png" />

答案 6 :(得分:-3)

应使用get_home_url(),然后您的链接是绝对的,但如果您更改网站网址则不会影响

答案 7 :(得分:-4)

我认为您所做的是在更改域名时,您拥有的sql转储文件可以用新的域名替换旧域名的所有实例。这是唯一可用的选项,因为没有可帮助您执行此操作的插件。

这是最快的方式..

答案 8 :(得分:-4)

有一种简单的方法

而不是/pagename/使用index.php/pagename/或者如果您不使用固定链接,请执行以下操作:

发布

index.php?p=123

index.php?page_id=42

分类

index.php?cat=7

此处提供更多信息:http://codex.wordpress.org/Linking_Posts_Pages_and_Categories