Рубрики
WordPress Настройка Разработка

Апгрейд WordPress до WordPress Site Network (WordPress в режиме сети)

Продолжаем и углубляем тему установки WordPress в рамках цикла статей по обустройству рабочего места WordPress-разработчика.

WordPress Site Network – WordPress в режиме сети (еще одно название “режим Multisite”), до выхода WordPress 3.0 распространялся в виде отдельного дистрибутива и назывался WordPress MU. Начиная с версии 3.0 весь функционал WordPress MU был интегрирован в основное ядро WordPress. WordPress MU больше не существует как отдельная разработка.

Что дает режим сети? Возможность создания практически неограниченного количества подсайтов в рамках одной инсталляции. Подсайт функционирует почти как отдельный блог, со своим администратором, пользователями и т.п. Т.е. если вы хотите, чтобы в рамках одного сайта, у вас было несколько разных по тематике блогов (подсайтов), то режим сети – это ваш выбор.

Для WordPress-разработчика режим сети это дополнительная, хотя и не очень большая, головная боль. Например новый плагин, надо тестировать как в обычной установке, так и в сетевой. Предусмотреть корректную активацию плагина по всей сети, корректную работу на подсайтах и т.п. Таким образом наличие не только обычной установки WordPress, но и сетевой – обязательное требование к рабочему месту )

Активация режима сети

У вас уже должна быть создана чистая установка WordPress с рабочими постоянными ссылками.

Существует два основных варианта создания сети:

  1. Подсайты располагаются на поддоменах (site1.example.com и site2.example.com)
  2. Подсайты располагаются в поддиректориях (example.com/site1 и example.com/site2)

Для установки на локальном сервере мы выбираем более простой второй вариант. Требования к системе: наличие mod_rewrite и работающего .htaccess. Если на вашем сайте работают постоянные ссылки, значит эти требования выполнены в полном объеме.

  • Первый шаг. Открываем для редактирования wp-config.php и добавляем в него следующую строчку:
    define('WP_ALLOW_MULTISITE', true);

    сразу НАД надписью /* Это всё, дальше не редактируем. Успехов! */

  • Сохраняем wp-config.php и переходим в панель управления. Открываем меню Инструменты -> Установка сети:
    Установка WordPress Site Network (1)
    Установка WordPress Site Network (1)

    Выбираем имя сети, вводим e-mail администратора сети (ввожу такой же как у администратора текущей установки).

  • Нажимаем кнопку Установить и в точности следуем инструкциям полученным на следующей странице:
    Установка WordPress Site Network (2)
    Установка WordPress Site Network (2)

    1. Создаем папку blogs.dir внутри папки wp-content.
    2. Добавляем строки, указанные в п.2 в wp-config.php. Лично я их вставляю на место ранее вставленной строки – define(‘WP_ALLOW_MULTISITE’, true); – ее можно удалить, она нужна только для вывода страницы с инструкцией. Вот на всякий случай фрагмент итогового файла:

    define('WP_DEBUG', false);
    
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', false );
    $base = '/_wordpress-clean/';
    define( 'DOMAIN_CURRENT_SITE', 'localhost' );
    define( 'PATH_CURRENT_SITE', '/_wordpress-clean/' );
    define( 'SITE_ID_CURRENT_SITE', 1 );
    define( 'BLOG_ID_CURRENT_SITE', 1 );
    
    /* Это всё, дальше не редактируем. Успехов! */

    3. Заменяем правила в файле .htaccess. Заменяем все строки между # BEGIN WordPress и # END WordPress. Получаем:

    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /_wordpress-clean/
    RewriteRule ^index\.php$ - [L]
    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
    RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
    RewriteRule . index.php [L]
    # END WordPress
  • На этом все. Возвращаемся в панель управления, чтобы создать новый сайт сети.

Создание сайта сети

  • Пару слов о создании дополнительного сайта. После успешной установки сети, в панели управления при нажатии на имя пользователя, вы должны увидеть новый пункт меню – Управление сетью:
    Создание нового сайта сети (1)
    Создание нового сайта сети (1)

    Конечно, этот пункт доступен только, если вы являетесь администратором сети.

  • В панели управления сетью переходим в меню Сайты -> Добавить новый:
    Создание нового сайта сети (2)
    Создание нового сайта сети (2)

    Выбираем адрес сайта (должен быть уникальный, не должен совпадать с ярлыками страниц основного сайта), заголовок, e-mail администратора и нажимаем Добавить сайт.

  • Возвращаемся к списку сайтов:
    Создание нового сайта сети (3)
    Создание нового сайта сети (3)

    и переходим в консоль нового сайта.

  • Язык нового сайта по умолчанию – английский. Не пугайтесь. Переходим в Settings -> General и изменяем язык сайта на русский:

    Создание нового сайта сети (4)
    Создание нового сайта сети (4)
  • Все. Теперь у нас два сайта: основной (http://localhost/_wordpress-clean/) и дополнительный ( http://localhost/_wordpress-clean/site1).

Читайте далее: Установка Eclipse PHP Development Tools (PDT) на Windows.

Полезные ссылки:

7 ответов к “Апгрейд WordPress до WordPress Site Network (WordPress в режиме сети)”

Народ, а может у кого есть скрипт для вывода комбобокса со списком дочерних сайтов сети на главном сайте или как-то так и/или знаете где это посмотреть – дайте знать! очень нужно ))))

Вот пример виджета для вывода сайтов сети:

class Network_Sites extends WP_Widget {

	function __construct() {

		$widget_ops = array('classname' => 'network_sites', 'description' => "Cписок сайтов сети" );
		
		parent::__construct('network_sites', "Cайты сети", $widget_ops);

	}

	function widget($args, $instance) {
		
		global $wpdb;
			
		extract($args);

		echo $before_widget; 
		
		echo $before_title . 'Сайты сети' . $after_title;
		
		$blog_id_cur = get_current_blog_id();
	
		$blog_ids = $wpdb->get_results( $wpdb->prepare("SELECT blog_id FROM $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0'"), ARRAY_A ) ;
		
		if ($blog_ids) { 
		
			foreach ($blog_ids as $blog_id) {
				
				$blog_id = (int)$blog_id['blog_id'];
			
				$blog = get_blog_details( $blog_id );
			
				$blogs[$blog->blogname] = $blog;
				
			}
			
			if (is_array($blogs)) {

				ksort($blogs);
			
				echo '<ul>';
			
				foreach ($blogs as $blog) {
					
					if ($blog->blog_id == $blog_id_cur) {
						
						echo '<li>'. $blog->blogname .'</li>';
						
					} else {
					
						echo '<li><a href="'.hrap_domain($blog->blog_id).'">'.$blog->blogname.'</a></li>';
				
					}
					
				}
			
				echo '</ul>';
				
			}
		
		}
		
		echo $after_widget; 
			
	}
	
}

function hrap_domain($blog_id) {
	
	global $wpdb;
	
	if ($blog_id == '1') return network_home_url();
	
	if (isset($wpdb->dmtable)) {
    
    return 'http://'.$wpdb->get_var( "SELECT domain FROM {$wpdb->dmtable} WHERE blog_id = '$blog_id' AND active = 1 LIMIT 1" );
	
	} else {
	
    return 'http://'.DOMAIN_CURRENT_SITE.$wpdb->get_var( "SELECT path FROM {$wpdb->blogs} WHERE blog_id = '$blog_id' LIMIT 1" );
    
	}
}

register_widget('Network_Sites');

Код разместить в functions.php текущей темы.

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

Тут фишка в чем? Сайты на разных доменах работают с одной инсталяции WordPress, т.е. никакие файлы никуда дополнительно заливать не надо.
Все поддомены должны указывать на основную инсталляцию.

странно, Я когда перехожу в консоль сайта, мне выводит 404. А на сервере вообще надо каталоги для поддоменов создавать? Понятно что на денвере всё само происходит, но что делать если настройки хостера?

Нет, не надо на сервере никаких дополнительных каталогов.

Я когда перехожу в консоль сайта, мне выводит 404

Мне кажется, вы здорово начудили с инсталяцией. Советую начать заново.
Причем установка сети сайтов на поддоменах – это более сложный вариант, чем установка сети на подкаталогах (нужно вносить дополнительные записи в dns, не все хостеры предоставляют эту услугу). Лучше начать с подкаталогов.
В дальнейшем можно будет выдать сайтам отдельные домены с помощью плагина WordPress MU Domain Mapping

Как оказалось проблема была с настройками панельки ISP,

В ispmanager все деается так. В разделе www-домены открываете свойства нужного домен и в поле “Псевдоним” дописываете туда через пробел символ *

На этом все. Панель сама создаст запись в DNS если ее нету. И настроит apache.

Потом прописываем поддомен у хостера (у большинства это наверное делается автоматически) и всё.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *