ajmartin
  • 0
Новичок

Несколько доменных имен — одна установка WP (не мультисайтовая) — каждое доменное имя по умолчанию соответствует архиву категорий

  • 0

Вариант использования несколько прост — здесь идет:

  1. Пять человек делят одну установку WordPress, а не многопользовательскую
  2. Каждый человек ведет блог и помещает свои сообщения в свою собственную уникальную категорию.
  3. У каждого человека есть собственное доменное имя
  4. Все доменные имена указывают или припаркованы к одной и той же папке установки WP.
  5. Доменное имя каждого человека показывает сообщения только из его категории, т.е.

    • http://blogger1.com возвращает архив категорий сообщений Blogger1,
    • http://blogger2.com вернет архив категорий сообщений Blogger2,
    • и т.п.
  6. Удобная для Google индексация для каждого доменного имени
  7. Предпочитайте решение перезаписи, а не перенаправление, но перенаправление приемлемо
  8. «Главная» учетная запись сможет публиковать или редактировать любые сообщения блоггеров через «основной» доменный логин.
  9. Бонус — если бы это можно было распространить на пользовательские типы сообщений

Окружающая обстановка

  1. Одна установка последней версии WP (не многопользовательская)
  2. Красивые постоянные ссылки
  3. Cpanel — для настройки парковки домена
  4. Нет субдоменов
  5. Доступ к.htaccess
  6. Доступ кfunctions.php
Share
  1. Почему бы вам просто не использовать Multisite для этого?

    • 0
    • Это функционально эквивалентно мультисайту, но более сложно, и главная учетная запись будет просто пользователем с правами суперадминистратора. Кроме того, домены здесь вам нужно будет переписать, но даже в этом случае правила перезаписи постоянных ссылок не смогут справиться с этим сценарием, выполнение этого будет хрупким, займет много времени на обслуживание, легко сломается и будет сложным. реализовать. Мультисайт, с другой стороны, делает все это по замыслу.

      • 0
    • пользовательская таксономия вместо категорий — это был бонус

      • 0
    • это отличное решение. Я пропустил вариант использования. «Главная» учетная запись сможет публиковать или редактировать любые сообщения блоггеров через «основной» доменный логин. Здесь кажется, что вы должны войти в систему с доменным именем, чтобы увидеть какие-либо сообщения. Было бы здорово иметь возможность исключить основное доменное имя из перезаписи, чтобы он мог редактировать любой пост.

      • 0
    • Вызов неопределенной функции wp_safe_redirect() в /home/targeted/public_html/wp-config.php в строке 3. Я получаю эту ошибку, если использую домен, не указанный в списке — я предполагаю, что функция не загружена в этот момент.

      • 0
    • @aj martin — я обновил код, чтобы удовлетворить ваши требования к основному домену, и исправил найденную вами ошибку. Что касается пользовательской таксономии, может быть, в другой день. 🙂

      • 0
    • @aj martin — Также, пожалуйста, обновите свой вопрос с вашим новым требованием, чтобы тот, кто найдет этот вопрос через SEO, не был сбит с толку, если он прочитает только ваш вопрос, а не комментарии.

      • 0
  2. Вот два разных решения (редактирование особенностей вашего варианта использования) :

    Делаем редирект:

    1.) В верхней части /wp-config.php файла добавьте следующее:

    if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) {
      $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
      define( 'WP_SITEURL', 'http://' . $domain );
      define( 'WP_HOME', 'http://' . $domain );
    } else if ( ! is_main_domain( $_SERVER['SERVER_NAME'] ) ) {
      header( "Location:http://{$yoursite_main_domain}", true, 301 );
      exit;
    }
    function is_main_domain( $domain ) {
      $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
      return strpos( $domain, 'maindomain.com' ) !== false;
    }
    function is_yoursite_blogger_domain( $domain ) {
      $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] );
      return in_array( $domain, array(
        'blogger1.com',
        'blogger2.com',
        'blogger3.com',
        'blogger4.com',
        'blogger5.com',
        'uncategorized.dev', // Only here for use on my own test site
       ) );
    }
    

    2.) Затем добавьте это в functions.php файл вашей темы:

    add_action( 'template_redirect', 'yoursite_template_redirect' );
    function yoursite_template_redirect() {
      $path = $_SERVER['REQUEST_URI'];
      if (strpos($path,"/category/") === false) {
        $domain = str_replace( 'www.', '', $_SERVER['SERVER_NAME'] ) ;
        $category = str_replace( '.com', '', $domain );
        $category = str_replace( '.dev', '', $domain );  // Only for my own test site
        $location = "http://{$domain}/category/{$category}/" ;
          wp_safe_redirect( $location );
          exit;
        }
      }
    }
    

    Вышеупомянутое будет выполнять перенаправление 302, http://blogger1.com/category/blogger1/ когда запрос будет сделан с любого URL-адреса http://blogger1.com, кроме того, который начинается с http://blogger1.com/category/ (вам необходимо внести некоторые изменения для поддержки других URL-адресов).

    Выполнение «Перезаписи»:

    То, что выше не поддерживает, — это «переписать » решение по сравнению с «перенаправлением». Если вы хотите, чтобы это было немного сложнее. Следующий код приведет к загрузке страницы категории по корневому пути для любого домена, сопоставленного в вашей is_yoursite_blogger_domain() функции. Конечно, ваша is_yoursite_blogger_domain() функция может проверять существующие категории, но я не знаю полных критериев, поэтому я просто жестко закодировал ее. Вы можете скопировать этот код в theme.php файл вашей функции или поместить в .php файл плагина, который вы, возможно, пишете. Обратите внимание, что для этого кода также требуется код из /wp-config.php файла выше:

    add_action( 'category_link', 'yoursite_category_link', 11, 2 );
    function yoursite_category_link( $category_link, $category_id ) {
      // Make sure any blogger category links are truncated to the root
      $parts = explode( '/', $category_link );
      if ( is_yoursite_blogger_domain( $parts[2] ) ) {
        // if %category% in http://%domain%/category/%category%/ 
        // equals %domain% minus the 'com' extension
        if ( "{$parts[4]}." == substr( $parts[2], 0, strlen( $parts[4] ) + 1 ) ) {
         $category_link = "http://{$parts[2]}/"; // Strip 'category/%category%/'
        }
      }
      return $category_link;
    }
    
    add_action( 'init', 'yoursite_init' );
    function yoursite_init() {
      // Remove the canonical redirect to the category page
      // if %category% in http://%category%.%ext%/ is a blogger category.
      if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) {
        $parts = explode( '/', strtolower( $_SERVER['REQUEST_URI'] ) );
        if (count($parts) > 1) {
          $category_base = get_option( 'category_base' );
          if ( empty( $category_base ) )
            $category_base = 'category';
          if ( $category_base == $parts[1] ) {
            remove_filter( 'template_redirect', 'redirect_canonical' );
          }
        }
      }
    }
    
    add_action( 'template_redirect', 'yoursite_template_redirect' );
    function yoursite_template_redirect() {
      // Redirect any http://%category%.%ext%/category/%category%/ to http://%category%.%ext%/
      if ( is_yoursite_blogger_domain( $_SERVER['SERVER_NAME'] ) ) {
        $category_base = get_option('category_base');
        if (empty($category_base))
          $category_base = 'category';
        $parts = explode( '/', strtolower( $_SERVER['REQUEST_URI'] ) );
        if ( $category_base == $parts[1] &&
           "{$parts[2]}." == substr( $_SERVER['SERVER_NAME'], 0, strlen( $parts[2] ) + 1 ) ) {
          wp_safe_redirect( "http://{$_SERVER['SERVER_NAME']}/", 301 );
          exit;
        }
      }
    }
    
    add_action( 'request', 'yoursite_request' );
    function yoursite_request($query_vars) {
      // If %category% in http://%category%.%ext%/ is a blogger category set the
      // 'category_name' query var to tell WordPress to display the category page.
      $domain = $_SERVER['SERVER_NAME'];
      if ( is_yoursite_blogger_domain( $domain ) ) {
        $path = $_SERVER['REQUEST_URI'];
        if ( strpos( $path, "/category/" ) === false ) {
          $domain = str_replace( 'www.', '', $domain ) ;
          $category_name = substr( $domain, 0, strrpos( $domain, '.' ) );
          $query_vars = array( 'category_name' => $category_name );
        }
      }
      return $query_vars;
    }
    

    А вот скриншот, показывающий второй пример в действии:

    Снимок экрана сайта WordPress, использующего хуки, позволяющие отображать страницу категории в корневом URL-адресе для выбранных категорий.
    (источник: mikeschinkel.com )

    Другой, вероятно, лучший способ приблизиться к этому — использовать пользовательскую таксономию вместо категорий или, что еще лучше, вместо этого сопоставить домен с именем пользователя. Таким образом, на авторов уходит меньше работы, и вам не нужно беспокоиться о сохранении списка блоггеров в коде или в отдельном списке таксономии.

    Что касается вашего «бонуса», извините, но я не понимаю, что вы там хотите.

    • 0
    1. Создайте псевдоним(ы) домена

    2. Добавьте это в ваш файл wp-config:

      define('WP_SITEURL','http://'.$_SERVER['SERVER_NAME']);
      define('WP_HOME','http://'.$_SERVER['SERVER_NAME']);
      
    3. Перейдите к своей теме и добавьте что-то вроде этого, чтобы загрузить основной контент (использовал это для одного пейджера):

      $home=get_page_by_path(substr($_SERVER['SERVER_NAME'], 0, strlen($_SERVER['SERVER_NAME'])-4));
      echo do_shortcode($home->post_content);
      
    4. измените заголовок категории, страницы или поста на доменное имя мин. домена верхнего уровня, в данном случае домен верхнего уровня только с 4 символами. Например:.com.net.org если вы хотите использовать что-то вроде.nl.be или.de, вам следует изменить 4 на 3. Если вы хотите использовать оба, вам нужно добавить условия.

    Примечание. Это может работать только для одной страницы, но я только даю вам идею. Вы можете самостоятельно расширить функционал кода, если это необходимо

    • 0

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

You must login to add an answer.