Here’s a WordPress plugin that will help you transfer your site across domains by stripping out the default “absolute url” from post content with a relative “/”; note that this works as you create content, so it should be the first plugin you install!
Download ABT Relative Urls Download from WordPress
As taken from the readme
file:
Description
By default, WP inserts absolute urls into post content; this includes the protocol and domain, which is based on the home
Admin setting. This plugin replace all self-referencing (domain) links with relative paths “/” instead. Works when inserting images into posts, and on the actual save_post
action it scrubs the content, excerpt, and post_meta fields.
Especially helpful when developing on a DEV site with the intention of transfering to a LIVE domain. Please note that you should use this plugin before you start adding content, or you’ll have to resave everything later.
Includes code based on Relative Image URLs plugin, which strips domain when inserting images from the Media Library. A similar idea to Absolute to Relative URLs, but works automatically, and handles meta fields.
Installation
- Unzip, upload plugin folder to your plugins directory (
/content/plugins/
) - Activate plugin
- Create content – view HTML source to ensure that domains have been stripped from content.
Frequently Asked Questions
How does it work?
First, it determines the absolute URL from the admin settings (home
key, via home_url()
), as this is what WordPress uses when hardcoding links.
On save_post
action, it examines both the post_content
and post_excerpt
submissions and strips the current domain/protocol from:
href
attributessrc
attributes- all other instances of the domain
It then retrieves all of the postmeta
, scans through the array, and removes the domain from any values. Since it’s a direct dump, it maybe_unserialize
s each value before recursively scrubbing the content.
Can I use the absolute URL?
Yes with protected shortcode:
[abt_absolute_url trailing="/suffix/"]
where the attribute trailing
is optional, and would append whatever is given to the absolute url. Really it’s just provided as a “just-in-case”, as you could write [abt_absolute_url]/suffix/
just the same.
Can I change what’s replaced?
By default, the following:
array( 'src="' . $absolute_path_prefix , 'href="' . $absolute_path_prefix , esc_attr( $absolute_path_prefix ) )
are replaced with
array( 'src="' . $relative_path_prefix , 'href="' . $relative_path_prefix , esc_attr( $relative_path_prefix ) )
Two hooks are provided to alter these defaults:
abt_relative_urls_get_search_for
: the first “search” arrayabt_relative_urls_get_replace_with
: the second “replace” array
The reason it looks for the src
, then href
, then the actual attribute has to do with compatibility with the included relative image url plugin.
Developers
Check out our other developer-centric plugin, WP-Dev-Library. Suggestions/improvements welcome!