### Reverting to absolute url's ### Implementing root-relative url's was pretty much doable, but complicated because WP was written to use absolute url's and expects absolute url's. I realised that all I wanted was for people visiting my site to be able to see all links using the same domain as the one they specified. This didn't mandate using root-relative url's. So I've rewritten the code to replace the domains in all relevant url's with the domain specified by the visitor. The **complete code** is **much simpler**! // set the url's domain to that of the current host, IGNORING any specified subdomains. // (other WordPress users may need to retain the subdomains) function gregory_use_host_domain( $url='' ) { $myDomains = '(?:domain1|domain2|domain3|xn--domain4|xn--domain5)'; $matches = array(); // get the current host domain. ignore/remove any subdomain. if( 1 != preg_match( '!.*('.$myDomains.'\.hk)!iu', $_SERVER['HTTP_HOST'], &$matches )) // preg_match returns 1 if the pattern was found. // the current host is not one of the above specified domains! weird. this will probably never happen, but just in case... return $url; $thisDomain = ( is_ssl() ? 'https://' : 'http://' ).$matches[1]; if( 1 == preg_match( '!^(?:https?://[^/]*'.$myDomains.'\.hk)(/.*)?$!iu', $url, &$matches )) // fully qualified url. return $thisDomain.$matches[1]; if( substr( $url, 0, 1 ) == '/' ) // root-relative url. return $thisDomain.$url; // relative url but not root-relative. return $thisDomain.'/'.$url; } add_filter( 'site_url', 'gregory_use_host_domain', 11, 1 ); add_filter( 'home_url', 'gregory_use_host_domain', 11, 1 ); /* * CONTENT_URL() * this function directly affects the template_ and stylesheet_ directory uri results, * but they don't matter as far as the visitor is concerned. they're not going to directly * access those particular url's. * * SPAM-FREE-WORDPRESS PLUGIN * the Spam-Free-Wordpress plugin uses plugin_dir_url() and plugin_dir_path() to get the paths to its resources, * but we're not going to worry about specifying the domain for these items. * wp's plugin_dir_url() uses wp's plugins_url() * wp's plugin_dir_path() uses php's dirname() */ // a filter to specify the 'domain1.hk' domain for WPSEO's canonical links. // one specific domain for all content canonical links. no 'duplicate' content. function gregory_wpseo_specify_canonical_domain( $canonical='' ) { $matches = array(); if( 1 != preg_match( '!^(?:https?://[^/]+)(/.*)?$!iu', $canonical, &$matches )) return $canonical; // get_option is defined in wp-includes/functions.php and is used by get_home_url() to get the home url. return get_option('home').$matches[1]; } add_filter( 'wpseo_canonical', 'gregory_wpseo_specify_canonical_domain', 10, 1 ); cheers, Gregory (WordPress 3.4.2)