我总是发现在Wordpress中令人沮丧的是,图像,文件,链接等都是用绝对URL而不是相对URL插入到WordPress中的.相对URL更便于切换域名,在http和https等之间切换.今天我发现如果你用相对url定义WP_CONTENT_URL,那么当你将文件插入帖子时,他们使用src的相对url而不是绝对url .正是我一直想要的!但官方的Wordpress文档说,如果要定义WP_CONTENT_URL ,则应使用完整的URI.
将WP_CONTENT_URL设置为此目录的完整URI(无尾部斜杠),例如
Run Code Online (Sandbox Code Playgroud)define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');
当我使用相对URL时,似乎工作正常,例如
define( 'WP_CONTENT_URL', '/my-content-folder');
Run Code Online (Sandbox Code Playgroud)
但使用相对URI有问题吗?我只是认为Wordpress必须有一个理由说它应该用完整的URI定义.
bra*_*ilo 61
我认为这只是一个核心开发人员可以/应该回答的问题.我研究并找到了核心票#17048:传递给浏览器的URL应该是root-relative.我们可以在哪里找到主要核心开发人员Andrew Nacin解释的原因.他还链接到这个[wp-hackers]线程.在这两个链接上,这些是WP不使用相对URL的关键引号:
核心票:
根相对URL并不合适.
/path/
可能不是WordPress,它可能在安装之外.所以它真的与绝对URL没什么不同.移动安装时,任何相对URL也会使执行转换变得更加困难.在大多数情况下,find-replace是必要的,并且由于这些原因,具有绝对URL具有讽刺意义的更具可移植性.
许多其他地方都需要绝对URL.需要有条件地添加这些将增加处理,以及引入潜在的错误(和插件不兼容).
[wp-hackers]主题
相对于什么,我不确定,因为WordPress经常在子目录中,这意味着我们总是需要处理内容然后添加到路径的其余部分.这引入了开销.
请记住,有两种类型的相对URL,包含和不包含前导斜杠.两者都有警告,这使得无法正确实施.
WordPress应该(并且确实)存储绝对URL.这不需要预处理内容,不需要开销,也不需要模糊.如果需要重定位,则它是数据库中的全局查找替换.
并且,就个人而言,我不止一次发现主题和插件编码错误,只是在WP_CONTENT_URL
定义时就会中断.
他们不知道这可以设置并假设这是真的:WP.URL/wp-content/WhatEver,并非总是如此.有些东西会一路走来.
插件相对URL(在edse的答案中链接),在action钩子wp_make_link_relative
中的一系列过滤器中template_redirect
应用该函数.这是一个非常简单的代码,似乎是一个不错的选择.
dav*_*rey 13
<?php wp_make_link_relative( $link ) ?>
Run Code Online (Sandbox Code Playgroud)
将完整URL路径转换为相对路径.
删除http或https协议和域.保持路径'/'在开头,因此它不是真正的相对链接,而是来自Web根目录.
我同意Rup.我想主要原因是避免相对路径上的混淆.我认为wordpress可以从头开始使用相对路径,但是当使用多个插件时,问题可能会出现,主题是如何配置的等等.
在处理测试服务器时,我曾经将这个插件用于相对路径:
我在我的网站上解决了这个问题,在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);
}
Run Code Online (Sandbox Code Playgroud)
我拿了一个插件的一部分,把它切成碎片并制作了这个。它替换了我网站中的所有链接(菜单、CSS、脚本等),并且一切正常。
归档时间: |
|
查看次数: |
104309 次 |
最近记录: |