我总是觉得在WordPress中使用绝对URL而不是相对URL将图像,文件,链接等插入到WordPress中令人沮丧。相对URL更便于切换域名,在http和https等之间切换。今天我发现如果你用相对url定义WP_CONTENT_URL,那么当你将文件插入帖子时,他们使用src的相对url而不是绝对url 。正是我一直想要的!但是官方的WordPress文档说如果要定义WP_CONTENT_URL,则应该使用完整URI 。
将WP_CONTENT_URL设置为此目录的完整URI (无尾随) 斜线),例如
define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');
当我使用相对URL时,一切似乎都能正常工作,例如
define( 'WP_CONTENT_URL', '/my-content-folder');
但是使用相对URI有问题吗?我只是认为WordPress必须有理由说明它应该用完整的URI定义。
答案 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根目录。
答案 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