Si establece domain.com
como un alias de original.com
, en WordPress no tiene que hacer nada para que funcione.
El problema es el país: una vez en DNS, los 2 dominios son alias, cada URL de su WordPress será accesible a través de dominios definidos por el usuario: domain.com/any/wp/url
pero también domain2.com/any/wp/url
, domain3.com/any/wp/url
y así sucesivamente ...
Entonces, lo que tienes que hacer es
- Compruebe si la url es uno de los dominios definidos por el usuario
- Si es así, verifique si la página solicitada es un CPT singular y su autor es el que guardó el dominio
- Si no, redirija la solicitud al dominio original.
Supongamos que guarda su dominio original en una constante, tal vez en wp-config.php
define('ORIGINAL_DOMAIN', 'original.com');
ahora puede implementar fácilmente el flujo de trabajo descrito anteriormente:
add_action('template_redirect', 'check_request_domain', 1);
function check_request_domain() {
$domain = filter_input(INPUT_SERVER, 'HTTP_HOST', FILTER_SANITIZE_URL);
// strip out the 'www.' part if present
$domain = str_replace( 'www.', '', $domain);
// if the request is from original domain do nothing
if ( $domain === ORIGINAL_DOMAIN ) return;
// if it is not a singular company CPT request redirect to same request
// but on original domain
if ( ! is_singular('company') ) {
redirect_to_original(); // function defined below
}
// if we are here the request is from an user domain and for a singular company request
// let's check if the author of the post has user meta, assuming meta key is `'domain'`
// and the meta value is the same of domain in current url
$meta = get_user_meta( get_queried_object()->post_author, 'domain', TRUE );
if ( $meta !== $domain ) { // meta doesn't match, redirect
redirect_to_original(); // function defined below
} else {
// meta match, only assuring that WordPress will not redirect canonical url
remove_filter('template_redirect', 'redirect_canonical');
}
}
Ahora escribamos una función para redirigir la solicitud usando la URL actual, pero con el dominio original
/**
* Redirect the request to same url, but using original domain
*/
function redirect_to_original() {
$original = untrailingslashit( home_url() ) . add_query_arg( array() );
wp_safe_redirect( $original, 301 );
exit();
}
Lo último que debe hacer es filtrar la creación de enlaces permanentes para usar el dominio definido por el usuario para urls CPT de empresas singulares:
add_filter( 'post_type_link', 'custom_user_domain_plink', 999, 2 );
function custom_user_domain_plink( $post_link, $post ) {
// we want change permalink only for company cpt posts
if ( $post->post_type !== 'company' ) return $post_link;
// has the user setted a custom domain? If not, do nothing
$custom = get_user_meta( $post->post_author, 'domain', TRUE );
if ( empty($custom) ) return $post_link;
// let's replace the original domain, with the custom one, and return new value
return str_replace( ORIGINAL_DOMAIN, $custom, $post_link);
}
En este punto, solo ha configurado DNS para su servidor, donde todos los dominios definidos por el usuario son alias del original.
Tenga en cuenta que el código no se ha probado.