Intereting Posts
Как я могу включить идентификатор пользователя внутри php-кода короткого кода? Как отображать сообщения из пользовательского типа сообщения со стандартной категорией wordpress Рекомендации по переходу на петлю / вложенные петли пакетное значение автозагрузки UPDATE в таблице wp_options Плагины сообщений 2: лучший способ изменить значение поля подключения? Какие крючки следует использовать для предварительного входа и предварительной регистрации? Как сортировать сообщения на основе значения (числа) метаданных сообщения? Помощь по нескольким meta_query Как я могу извлечь информацию из своего цикла и разделить их отдельно? Фильтровать, когда сообщение обновляется получить только один последний комментарий от каждого сообщения Поддержка темы HTML5 для комментариев + форма «novalidate» – как правильно ее обрабатывать? Показывать количество проданных товаров, но сначала не менее 2 Выпадающее меню с несколькими уровнями Как автоматически переводить пользовательские роли пользователя?

Каков наилучший способ загрузки среды WP в поддомену моей многопоточной установки WordPress?

У меня есть установка вложенных папок WP multisite, скажем, на «domain.com».

Теперь мне нужно загрузить среду WP в поддомены domain.com, например «sub1.domain.com», «sub2.domain.com», … «subN.domain.com». Обратите внимание, что эти поддомены не соответствуют блогам WP. Но мне нужно иметь доступ к зарегистрированному пользователю, базе данных и т. Д.

Я создал поддомены подстановочных подстановок для загрузки php-файла, который будет отображать то, что мне нужно для какого-либо конкретного субдомена, и я включаю «wp-load.php» в начале этого файла. Проблема заключается в том, что около строки 99 в ms-settings.php перенаправляется на главную страницу сайта, потому что $ _SERVER ['HTTP_HOST'] является субдоменом, а не доменом основного сайта.

Итак, как я могу правильно загрузить среду WP в субдомене, отличном от блога?

У меня есть прототип, который работает, но я беспокоюсь о побочных эффектах того, что я делаю, поэтому было бы здорово, если бы кто-то, кто знаком с ядром, мог взвесить.

То, что я делаю, предварительно заполняет глобальные глобальные переменные $ current_site и $ current_blog, прежде чем включать «wp-load». Затем «ms-settings» не пытается создать их и не попадает на путь кода, который обнаруживает субдомен и перенаправляет на первую страницу.

Теперь я могу получить доступ к информации о членах (например, используя «get_userdata») и $ wpdb.

Это похоже на разумный подход?

Используйте определения, чтобы выбрать сайт, который вы хотите выбрать.

Вы можете определить эти четыре, чтобы правильно настроить значения $ current_site: DOMAIN_CURRENT_SITE, PATH_CURRENT_SITE, SITE_ID_CURRENT_SITE, BLOG_ID_CURRENT_SITE.

Если вы проверите функцию wpmu_current_site () в ms-load.php, вы увидите, что она использует их для создания $ current_site global.

Вы можете или не обязательно заполнять глобальный $ current_blog вручную. Не уверен. Попробуй и посмотри.

Так реалистично, все, что вам нужно сделать, это добавить что-то вроде этого, прежде чем вы вызовете wp-load.php:

define( 'DOMAIN_CURRENT_SITE', 'example.com' ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 ); 

Разумеется, правильные значения для вашего основного сайта example.com.

Если вы не хотите размещать их в самих php-файлах поддомена, вы можете сделать что-то подобное в файле wp-config.php или sunrise.php (если вы определяете SUNRISE на true в wp- config.php, конечно).

 if ( $_SERVER['HTTP_HOST'] == 'sub1.example.com' || $_SERVER['HTTP_HOST'] == 'sub2.example.com') { define( 'DOMAIN_CURRENT_SITE', 'example.com' ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 ); } 

Это в значительной степени то, что для загрузки файла восхода солнца существует, чтобы разрешить место, где вы можете вручную переопределить такие вещи. Преимущество использования sunrise.php над wp-config.php для него (что также работает) заключается в том, что вы можете легко включить восход солнца в другое место, для тестирования и отладки и т. Д.

Вы можете попробовать подключиться к WordPress Mu Domain Mapping .

Обновить

На самом деле, лучше всего по вашему запросу включить wp-blog-header.php в верхней части вашего php-файла вашего поддомена, чтобы вы могли также загружать функции шаблона.

  include(dirname(__FILE__) . "/../path_to_my_blog/wp-blog-header.php"); 

Или вы можете сделать wp_redirect после включения wp-load.php

Я пытался сделать то же самое, что и задал в этом вопросе, и не мог обойти перенаправление, пока я не подделал vars-_SERVER до того, как включил wp-load.php:

 define('WP_USE_THEMES', false); define( 'DOMAIN_CURRENT_SITE', $siteRow['domain'] ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', $siteRow['wp_blog_id'] ); $_SERVER = array( "HTTP_HOST" => $siteRow['domain'], "SERVER_NAME" => $siteRow['domain'], "REQUEST_URI" => "/", "REQUEST_METHOD" => "GET" ); 

Массив $ siteRow – это моя собственная конфигурация сайта, обновляющая переменные с тем, что вам нужно. Нет перенаправления, и все функции WP в вашем распоряжении! Наслаждаться.

В настоящее время я использую оператор switch для установки DOMAIN_CURRENT_SITE

Я настроил его на работу при развертывании на реальном сервере. Коммутатор также устанавливает DOMAIN_CURRENT_SITE, когда я работаю локально на своей машине разработки. (таким образом, все домены верхнего уровня .dev)

После оператора switch я определяю другие вещи, которые не меняются, но связаны с MULTISITE.

 switch ($_SERVER['SERVER_NAME']) { case 'sub1.mydomain.com': case 'sub2.mydomain.com': case 'community.mydomain.com': define('DOMAIN_CURRENT_SITE', 'community.mydomain.com'); break; case 'sub1.mydomain.dev': case 'sub2.mydomain.dev': case 'community.mydomain.dev': define('DOMAIN_CURRENT_SITE', 'community.mydomain.dev'); break; default: define('DOMAIN_CURRENT_SITE', 'community.mydomain.com'); break; } define('WP_ALLOW_MULTISITE', true); define('MULTISITE', true); define('SUBDOMAIN_INSTALL', true); define('PATH_CURRENT_SITE', '/'); define('SITE_ID_CURRENT_SITE', 1); define('BLOG_ID_CURRENT_SITE', 1); 

Конечно, этот файл wp-config.php имеет в нем больше настроек, но я не включил их, потому что они не относятся к установкам WP MULTISITE.

Примечание. При работе на локальном компьютере (после загрузки последнего файла sql. Мне нужно выполнить массовые операции замены в базе данных, это немного не связано с вашим конкретным вопросом, но я собираюсь оставить нижеприведенный фрагмент wp-cli.org)

 wp search-replace 'community.mydomain.com' 'community.mydomain.dev' --network --dry-run wp search-replace 'sub1.mydomain.com' 'sub1.mydomain.dev' --network --dry-run wp search-replace 'sub2.mydomain.com' 'sub2.mydomain.dev' --network --dry-run