greg
  • 0
Новичок

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

  • 0

У меня есть подпапка установки мультисайта WP, скажем, на «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.

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

Share
  1. Попытка придумать более четкую формулировку для этого вопроса, не становясь слишком длинной. Может быть, «Как загрузить среду WP в поддомен без захвата мультисайта?»

    • 0
    • Конечно, если вы предпочитаете короткое точному. 🙂 Я, вероятно, должен добавить «мультисайт».

      • 0
    • Спасибо Отто. Это похоже именно то, что мне нужно. Я попробую и отчитаюсь здесь.

      • 0
    • @konus Может быть, привести пример того , как он мог бы использовать плагин…

      • 0
    • @EAMAnn На самом деле плагин полностью загружает основной блог в поддомен. Прочитав дважды, я понимаю, что этого вопроса хотят избежать. Извините за это :-/

      • 0
    • @konus, спасибо за ответ, но на самом деле он не касается вопроса, который я задаю. Мне не нужны функции шаблона, поэтому wp-load в этом отношении подходит. Кроме того, wp_redirect не решает проблему, с которой я столкнулся. ms-settings перенаправляется еще до того, как дойдет до «после wp-load.php». Как я уже сказал в вопросе, одним из решений является предварительное заполнение глобальных переменных $current_site и $current_blog, и я хотел бы знать, могут ли это иметь какие-либо неблагоприятные побочные эффекты.

      • 0
    • @greg, вы говорите: «Мне нужен доступ к зарегистрированному пользователю, базе данных и т. д.» . Включив wp-blog-header.php, вы сможете делать все, что хотите (создавать экземпляры $wpdb, загружать специальные wp- функции и т. д., а также функции шаблонов). Вы также можете использовать switch_to_blog, когда вам нужна конкретная информация из одного конкретного блога.

      • 0
    • @konus, я это понимаю. Но я получаю то, что мне нужно, используя wp-load. Это не проблема. Независимо от того, использую ли я wp-load или wp-blog-header, у меня будет одна и та же проблема с перенаправлением, потому что поддомен != основной домен. Я предполагаю, что я говорю, что ваш ответ, хотя, возможно, еще одна интересная вещь для обсуждения, не имеет отношения к моему вопросу о ms-settings, который загружается независимо. Или я что-то упускаю? Вы говорите, что wp-blog-header каким-то образом решает конкретную проблему, о которой я говорю.

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

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

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

    Вам может понадобиться или не понадобиться заполнять глобальную переменную $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, либо в файле восхода.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 );
    }
    

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

    • 0
  3. Вы можете попробовать плагин 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

    • 0
  4. Я пытался сделать то же самое, что и в этом вопросе, и не мог обойти перенаправление, пока не подделал переменные $_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 в вашем распоряжении! Наслаждаться.

    • 0
  5. В настоящее время я использую оператор 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
    
    • 0

Оставить ответ

You must login to add an answer.