Nếu bạn đặt domain.com
làm bí danh original.com
, trong WordPress, bạn không phải làm gì để nó hoạt động.
Vấn đề là countrary: một lần trong DNS 2 lĩnh vực là bí danh, mỗi url của WordPress của bạn sẽ có thể truy cập thông qua người sử dụng định nghĩa lĩnh vực: domain.com/any/wp/url
, mà còn domain2.com/any/wp/url
, domain3.com/any/wp/url
và vân vân ...
Vì vậy, những gì bạn phải làm, là
- Kiểm tra xem url có phải là một trong những miền do người dùng xác định không
- Nếu vậy, hãy kiểm tra xem trang được yêu cầu có phải là CPT không và tác giả của nó có phải là trang đã lưu tên miền không
- Nếu không, hãy chuyển hướng yêu cầu đến tên miền ban đầu
Giả sử bạn lưu tên miền gốc của bạn trong một hằng số, có thể trong wp-config.php
define('ORIGINAL_DOMAIN', 'original.com');
bây giờ bạn có thể dễ dàng thực hiện quy trình công việc được mô tả ở trên:
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');
}
}
Bây giờ hãy viết một hàm để chuyển hướng yêu cầu bằng url hiện tại, nhưng với tên miền ban đầu
/**
* 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();
}
Điều cuối cùng cần làm là lọc việc tạo permalink để sử dụng miền do người dùng xác định cho các url CPT của công ty số ít:
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);
}
Tại thời điểm này, bạn chỉ đặt DNS cho máy chủ của mình, trong đó tất cả các miền do người dùng xác định là bí danh của bản gốc.
Xin lưu ý mã chưa được kiểm tra.