Bạn có thể làm điều này với một tập tin sunawn.php tùy chỉnh. Đây thực chất là cách các plugin lập bản đồ miền hoạt động, tuy nhiên nó đặt một giao diện đẹp cho nó. Đối với một cái gì đó tùy chỉnh, bạn có thể viết một số PHP đơn giản để làm về cơ bản điều tương tự.
Bản chất của multisite liên quan đến việc tìm ra trang web nào sẽ phục vụ. Plugin ánh xạ tên miền thực hiện điều này bằng cách tạo bảng wp_domain_mapping và lưu trữ thông tin trong đó. Do đó, khi nhận được yêu cầu cho xxx.com, nó sẽ nhìn vào bảng đó và thấy rằng nó tương ứng với blog_id 123.
Đầu tiên, tạo một thiết lập WordPress và làm cho nó nhiều trang. Không quan trọng nơi nó thực sự sống, bởi vì chúng ta sẽ thay đổi tất cả. Để đơn giản, tôi sẽ đặt nó tại blog.stackexchange.com và biến nó thành một trang web loại thư mục con (những trang này dễ dàng hơn). Các thư mục con được tạo sẽ có khả năng là sên. / wordpress, / apple, / bất cứ điều gì.
Vì vậy, có, để bắt đầu, bạn thực sự làm cho nó sống tại blog.stackexchange.com/wordpress. Hãy xem đây là môi trường dàn dựng của bạn. Khi bạn tạo từng trang web, bạn có thể thực hiện công cụ tại đây cho đến khi bạn quyết định bật ánh xạ.
Để tự lập bản đồ tên miền, không cần plugin, bạn sẽ làm một cái gì đó như thế này:
Bước một: thêm define( 'SUNRISE', 'on' );
vào đầu tệp wp-config.php của bạn.
Bước hai: tạo tệp sunawn.php trong thư mục wp-content. Đặt <?php
ở đầu để bắt đầu với.
Bước ba: Trong tệp sunawn.php sẽ là logic của bạn để xác định trang web nào sẽ tải.
Bạn sẽ dựa trên $_SERVER[ 'HTTP_HOST' ]
biến này. Làm thế nào bạn làm điều đó chính xác là dễ dàng: tuy nhiên bạn muốn làm điều đó. Nếu bạn muốn chỉ cần viết một regex để tìm '/blog\.(.*)\.stackexchange\.com/'
và sau đó tìm bit đó trong cơ sở dữ liệu, bạn có thể làm điều đó.
Vì bạn đang sử dụng cùng một con sên ở đây là "thư mục con", nên bạn không cần một bảng riêng. Bạn chỉ có thể nhìn vào bảng wp_bloss chính để tìm trang bạn cần. Một cái gì đó tương tự như thế này:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
Khi bạn có $ current_blog, thì bạn cần mã sau đây:
$current_blog->domain = $_SERVER[ 'HTTP_HOST' ];
$current_blog->path = '/';
$blog_id = $current_blog->blog_id;
$site_id = $current_blog->site_id;
$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $current_blog->blog_id;
Điều này xác định trước các biến toàn cầu $ current_blog và $ current_site thay vì để các hàm MU của WordPress làm điều đó.
Điều này là đủ để làm cho trang web hoạt động và hoạt động (sau khi DNS của bạn trỏ đến nó và sắp xếp các công cụ lưu trữ ảo), tuy nhiên hầu hết các URL tĩnh được sử dụng trong mã HTML vẫn sẽ trỏ đến blog.stackexchange.com / wordpress, vì đó là nơi trang web sẽ thực sự. Ngoài ra, chức năng URL Canonical có thể sẽ không thích URL và cũng sẽ chuyển hướng bạn.
Để khắc phục những vấn đề này, bạn cũng có thể muốn xác định trước một số URL được liên kết với trang web. Những thứ như WP_SITEURL và WP_HOME. Ngoài ra, WP_CONTENT_URL, WP_PLUGIN_URL và WPMU_PLUGIN_URL. Điều đó sẽ bao gồm hầu hết các trường hợp các URL được điều chỉnh.
Cuối cùng, bạn sẽ muốn đặt 'COOKIE_DOMAIN'. Vì bạn có thể muốn đăng nhập được chia sẻ trên toàn bộ sự việc, bạn có thể đặt thông tin đó thành stackexchange.com hoặc thậm chí cao hơn nếu bạn không muốn chúng được chia sẻ thông tin đăng nhập.
Nếu bạn muốn nói về việc tích hợp hệ thống đăng nhập stackexchange bình thường vào WordPress, tôi cũng có thể trả lời các câu hỏi về điều đó, nhưng nó sẽ chi tiết hơn một câu trả lời. :)
Vui lòng gửi email cho tôi nếu bạn muốn giúp đỡ thêm với điều này. Vui mừng được hỗ trợ: otto tại wordpress.org.