问题描述
我一直在 Wordpress 中发现图像,文件,链接等都插入到 WordPress 中,绝对 URL 而不是相对 URL 。相对 URL 更方便切换域名,在 http 和 https 之间进行更改。今天我发现如果您使用相对 URL 定义 WP_CONTENT_URL,那么当您将文件插入到帖子中时,它们使用 src 的相对 url 而不是绝对 URL 。只是我一直想要的!但官方 Wordpress 文档说您应该使用完整的 URI,如果您正在定义 WP_CONTENT_URL 。
Set WP_CONTENT_URL to the full URI of this directory (no trailing slash), e.g.
define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');
当我使用相对网址 (例如,
define( 'WP_CONTENT_URL', '/my-content-folder');
但是使用相对 URI 有什么问题吗?我只是认为 Wordpress 的原因一定是说明它应该用一个完整的 URI 来定义。
最佳解决方案
我认为这只是一个核心开发者可以/应该回答的问题。我研究发现核心票#17048:URLs delivered to the browser should be root-relative 。在哪里可以找到主要核心开发商 Andrew Nacin 解释的原因。他还链接到 this [wp-hackers] thread 。在这两个链接上,这些是为什么 WP 不使用相对 URL 的关键报价:
核心票:
Root-relative URLs aren’t really proper.
/path/
might not be WordPress, it might be outside of the install. So really it’s not much different than an absolute URL.Any relative URLs also make it significantly more difficult to perform transformations when the install is moved. The find-replace is going to be necessary in most situations, and having an absolute URL is ironically more portable for those reasons.
absolute URLs are needed in numerous other places. Needing to add these in conditionally will add to processing, as well as introduce potential bugs (and incompatibilities with plugins).
[wp-hackers] 线程
Relative to what, I’m not sure, as WordPress is often in a subdirectory, which means we’ll always need to process the content to then add in the rest of the path. This introduces overhead.
Keep in mind that there are two types of relative URLs, with and without the leading slash. Both have caveats that make this impossible to properly implement.
WordPress should (and does) store absolute URLs. This requires no pre-processing of content, no overhead, no ambiguity. If you need to relocate, it is a global find-replace in the database.
而且,在个人笔记中,我发现主题和插件不好的代码,当
被定义时就会中断。他们不知道这可以设置,并假设这是真的:WP.URL /wp-content /WhatEver,并不总是这样。有些事情会一路冲破。
WP_CONTENT_URL
插件 Relative URLs(在 edse 的答案中链接),将 wp_make_link_relative
功能应用于动作钩 template_redirect
中的一系列过滤器。这是一个很简单的代码,似乎是一个不错的选择。
次佳解决方案
<?php wp_make_link_relative( $link ) ?>
Convert full URL paths to relative paths.
Removes the http or https protocols and the domain. Keeps the path ‘/’ at the beginning, so it isn’t a true relative link, but from the web root base.
Reference: WordPress Codex
第三种解决方案
我同意 Rup 。我想主要是为了避免相对路径的混淆。我认为 wordpress 可以从头开始使用相对路径,但使用多个插件时可能会出现问题,主题是如何配置的
在测试服务器上工作时,我曾经使用过此插件的相对路径:
Root Relative URLs
Converts all URLs to root-relative URLs for hosting the same site on multiple IPs, easier production migration and better mobile device testing.
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。