Це можна зробити за допомогою налаштованого файлу sunrise.php. Це, по суті, так працює плагін для відображення домену, однак він ставить передній край. Для чогось звичайного, ви можете написати простий PHP, щоб зробити те саме.
Суть мультисайту полягає у з'ясуванні, який сайт потрібно обслуговувати. Додаток для картографування домену робить це, створюючи таблицю wp_domain_mapping та зберігаючи інформацію там. Таким чином, коли він отримує запит на xxx.com, він переглядає цю таблицю і бачить, що відповідає blog_id 123.
Спочатку зробіть налаштування WordPress та зробіть його багатосайтовим. Не має значення, де воно живе насправді, тому що ми все це змінимо. Для простоти я б розмістив його на blog.stackexchange.com і зробив його сайтом підкаталогу (вони легші). Створені підкаталоги, швидше за все, будуть слимаками. / wordpress, / apple, / що завгодно.
Так що, для початку, ви дійсно робите це в прямому ефірі на blog.stackexchange.com/wordpress. Вважайте це вашим інсценуванням. Створюючи кожен сайт, ви можете робити його тут, поки не вирішите ввімкнути відображення.
Щоб зробити картографування домену самостійно, без плагіна, ви зробите щось подібне:
Перший крок: додайте define( 'SUNRISE', 'on' );
у верхню частину файлу wp-config.php.
Крок другий: створіть файл sunrise.php у каталогу wp-content. Покладіть <?php
вгорі для початку.
Крок третій: У файлі sunrise.php буде ваша логіка визначення того, який сайт потрібно завантажити.
Ви збираєтеся базувати це на $_SERVER[ 'HTTP_HOST' ]
змінній. Як зробити це точно - це просто: проте ви хочете це зробити. Якщо ви хочете просто написати регулярний вираз, '/blog\.(.*)\.stackexchange\.com/'
а потім шукати цей біт у базі даних, ви можете це зробити.
Оскільки ви тут використовуєте той самий слизь, що і "підкаталог", вам не потрібна окрема таблиця. Ви можете просто заглянути в головну таблицю wp_blogs, щоб знайти потрібний вам сайт. Щось подібне до цього:
$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );
Коли у вас є $ current_blog, вам знадобиться такий код:
$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;
Це заздалегідь визначає глобальні змінні $ current_blog та $ current_site замість того, щоб дозволити їм виконувати MU функції WordPress.
Цього буде достатньо для того, щоб сайт запрацював і працював (після того, як ваш DNS вкаже на нього та отримає віртуальний вміст хостингу), однак більшість статичних URL-адрес, які використовуються в HTML-коді, все одно вказуватимуть на blog.stackexchange.com / wordpress, оскільки саме там би був сайт. Крім того, функція Canonical URL, ймовірно, не сподобається URL-адресі, і перенаправить вас теж.
Щоб виправити ці проблеми, ви також хочете заздалегідь визначити кілька URL-адрес, пов’язаних із сайтом. Такі речі, як WP_SITEURL та WP_HOME. Також WP_CONTENT_URL, WP_PLUGIN_URL та WPMU_PLUGIN_URL. Це має охоплювати більшість випадків коригування URL-адрес.
Нарешті, вам потрібно встановити "COOKIE_DOMAIN". Оскільки ви, швидше за все, хочете, щоб входи використовувались у всьому світі, ви можете встановити його на stackexchange.com або навіть вище, якщо ви не хочете, щоб вони мали загальний вхід.
Якщо ви хочете поговорити про інтеграцію звичайної системи входу в stackexchange в WordPress, я можу відповісти на запитання і з цього приводу, але це буде трохи детальніше відповіді. :)
Якщо ви хочете отримати додаткову допомогу в цьому, надішліть мені електронну пошту. Радий надати допомогу: otto на wordpress.org.