Мультисайт в подпапке - Как сделать новые сайты на том же уровне подпапок, что и основной сайт
У меня следующая ситуация. У меня установлен WP Multisite в подпапке:
my-domain.com/subfolder/wp-multisite-root
Обычно новые сайты создаются следующим образом:
my-domain.com/subfolder/wp-multisite-root
my-domain.com/subfolder/wp-multisite-root/site1
my-domain.com/subfolder/wp-multisite-root/site2
my-domain.com/subfolder/wp-multisite-root/site3
Есть ли способ сделать так, чтобы они создавались вот так?
my-domain.com/subfolder/wp-multisite-root
my-domain.com/subfolder/site1
my-domain.com/subfolder/site2
my-domain.com/subfolder/site3
Есть еще одна особенность. В my-domain.com/subfolder/ находится другое (не WordPress) приложение.

Спустя столько лет, надеюсь, этот ответ все еще поможет вам...
Кажется, я разобрался с ситуацией, которую вы описываете. Хотя у меня нет установки WordPress в '/subfolder/', но есть установка 'в подкаталоге' для каждого языка на одном уровне:
my-domain.com/nl/ -> основная установка, ID сайта = 1
my-domain.com/en/ -> первый сайт, созданный мультисайтом, ID сайта = 2
my-domain.com/de/ -> второй сайт, созданный мультисайтом, ID сайта = 3
Это требует небольшого "вмешательства" в базу данных, но всё довольно просто.
Шаг 1: Убедитесь, что ваша основная установка мультисайта работает корректно в своем подкаталоге. В моем случае в 'wp-config.php' указано следующее:
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false); // разрешить установку в подкаталоге (true для поддоменов)
define('DOMAIN_CURRENT_SITE', 'my-domain.com/subfolder');
define('PATH_CURRENT_SITE', '/wp-multisite-root/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
(на самом деле у меня нет '/subfolder' :))
Шаг 2: Теперь создайте новый сайт через мультисайт в подкаталоге. При вводе имени папки 'site2' WordPress сообщит, что он будет создан как: my-domain.com/subfolder/wp-multisite-root/site2 Это правильно, мы вручную удалим папку 'wp-multisite-root'
Шаг 3:
Откройте phpMyAdmin/directAdmin
В таблице wp_blogs
отредактируйте запись вашего нового сайта.
Нам нужно изменить path
.
Это можно сделать следующим запросом:
UPDATE `wp_blogs` SET `path` = '/site2/' WHERE `wp_blogs`.`path` = '/wp-multisite-root/site2/';
Измените имя домена и сайта соответствующим образом. Также найдите ID сайта, указанный там. Если это первый дополнительный сайт, его ID будет 2, как в моем примере.
Шаг 4:
Перейдите в таблицу wp_<SITEID>_options
.
В нашем случае с ID сайта 2 это будет wp_2_options
.
Здесь нам нужно изменить option_value
для записей с option_name
'siteurl' и 'home'. Это можно сделать следующими запросами:
UPDATE `wp_2_options` SET `option_value` = 'my-domain.com/subfolder/site2/' WHERE `option_name` = 'siteurl';
UPDATE `wp_2_options` SET `option_value` = 'my-domain.com/subfolder/site2/' WHERE `option_name` = 'home';
Опять же, измените домен и имя папки соответственно. Обратите внимание, что мы удаляем 'wp-multisite-root' из URL, так что site2 будет на том же уровне, что и `wp-multisite-root'.
Шаг 5: Обновите wp-admin, и ваш(и) сайт(ы) будут отображаться так, как вы хотели.

Установка мультисайта в подпапке не позволяет мне добавить новый домен сайта без того, чтобы записи не отображались как 404. Основной домен работает нормально, новый тоже работает, кроме записей, которые отображаются как 404. Я перешел к постоянным ссылкам, но это не помогает, единственное, что работает — это установка постоянной ссылки в формате index.php/%postname%/
, тогда все работает, но это приводит к появлению index.php
во всех URL, что выглядит некрасиво с эстетической точки зрения. Думаю, мне нужно исправить что-то в .htaccess

Ответ Piemol отличный и сработал у меня. Однако я не мог войти ни на один из своих сайтов, кроме основного. Проверив свои куки, я обнаружил, что WordPress создавал куки только для моего основного сайта, а не для других подкаталогов. Используя пример OP, он создавал куки для /subfolder/wp-multisite-root
, которые /subfolder/site1
не мог использовать.
Я изучил ядро WordPress, чтобы понять, что нужно исправить, и в итоге добавил этот код в свой пользовательский плагин, чтобы исправить пути для куки:
define('COOKIEPATH', '/subfolder/');
define('SITECOOKIEPATH', '/subfolder/');
В моем случае структура сайта на самом деле такая же, как у Piemol, поэтому я исправил пути для куки на корневой:
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');

Извините, забыл добавить, что в my-domain/subfolder/ находится приложение.
