マルチサイトの移行で手こずった話

WP

WordPress(以下WP)のマルチサイトを別のサーバーに引っ越した時に、引っ越し先の管理画面で「サイトネットワーク管理」に繋がらなかった等のエラーに直面しました。
原因がわからず、本番環境でなかったのでこのままでいいかと数ヶ月放置していたのですが、昨日突然解決に至ったので、忘れないようにメモします。

 

マルチサイトとは

マルチサイトにすると、1つのWP(管理画面)で複数のWPサイトを運用することができます。

私が今回扱っているウェブサイトの例にあげると、1つのサーバー1つの管理画面で、アパレル会社の総合サイト・そのほかに2つのブランドサイトを運用しているものでした。

マルチサイト移行で手こずった

移行手順

  1. 移行元の作業(sample.com)
    1. DBのエクスポート(ダンプ)
    2. FTP経由でWPのファイルを全てローカルにダウンロード
  2. 移行先での作業(new.com)
    1. FTP経由で 1.2 のWPファイルをアップロード
    2. DBの接続先を移行先に変更(wp-config.php修正)
    3. 1.1 を移行先のDBにインポート
    4. DBのURLをsample.comからnew.com一括変更(Search Replace DB使用)

 

上記手順で普通のWPサイトならうまく移行できていたのですが、マルチサイトだとエラーが出ました。

 

エラー

下記のエラーが起こりました。

  1. サイトネットワーク管理のページに遷移できない
  2. 1は解決したが、総合サイトにリンクしてあったブランドサイト(子サイト)が見れない

サイトネットワーク管理のページに遷移できない

下のスクショの「サイトネットワーク管理」「ブランド1サイト」「ブランド2サイト」に遷移しようとすると

wp-admin/network/ なんてものはこのサーバーにないよ!というエラー。

Not Found
The requested URL wp-admin/network/ was not found on this server.

解決

マルチサイトのドメイン設定を変更していなかったのが問題でした。

wp-config.phpのDOMAIN_CURRENT_SITEを移行先に変更します。

// 変更前
define('DOMAIN_CURRENT_SITE', 'sample.com');
// 変更後
define('DOMAIN_CURRENT_SITE', 'new.com');

これで無事、サイトネットワーク管理の画面に遷移することができました!

解決に至ったきっかけは、サイトネットワーク管理の遷移リンクがsample.com/wp-admin/network/になっていたからです。
URLもちゃんと見ておけばよかった・・・。

総合サイトにリンクしてあったブランドサイト(子サイト)が見れない

サイトネットワーク画面には遷移できましたが、
今度は総合サイトのトップページにリンクしてあったブランドサイトに遷移できませんでした。

  1. リンクからブランドサイトに遷移すると404ページになる(URL末尾にスラッシュなし)
  2. ブランドサイトの管理画面上部にエラー
  3. ちなみに、管理画面からはブランドサイトにアクセスができる(URL末尾にスラッシュあり)

2で表示されたエラー

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-content/themes/new/functions.php:3) in /var/www/html/wp-includes/pluggable.php on line 1219

 

解決

ファイルの上部に空白があったことが原因でした。

このエラー文は、すでにヘッダー情報が生成されていますよ、という意味らしい(よくわからん)。
エラーで指摘されているファイルを修正します。functions.phpの3行目。

headers already sent by (output started at /var/www/html/wp-content/themes/new/functions.php:3)

 

ファイルの1コード目である「class Sample {」の前の
1行目と3行目に空行があるのでそれを削除します。

// 修正前
1: 
2: <?php
3: 
4: class Sample {
5:     public $array = array();
6: ...

// 修正後
1: <?php
2: class Sample {
3:     public $array = array();
4: ...

ちゃんとブランドサイトに遷移できました。

 

まとめ

 

今回は、マルチサイトの移行でエラーが不具合が発生しましたが、マルチサイトの設定を正しくすることとファイルの始まりの空行を消すことで解決することができました。

 

参考サイト

プラグインを使わず行う WordPressマルチサイトのサーバー移行と気を付けるべきポイント
先に謝ります、何かすいません。。。さて、話しを本題に移しますが、Webサイトをリニューアルする際、運用中のサイトはそのままで、開発環境を別で用意して構築を進めるというやり方は、比較的よく行う施策だったりします。開発環境を分けるメリットとして、構築中の未完成の Webサイトをエンドユーザーに見られなくて済むため、大胆なリ...
「Warning: Cannot modify header information…」エラーの解決方法[PHP]
PHPで「header()」関数を使用したら「Warning: Cannot modify header information - headers already sent by ・・・」とかいう見慣れないエラーが表示されたので解決方法を紹介します。
WordPressでWarning: Cannot modify...とエラーが出た場合の解決方法
WordPressでページを更新したとたん「Warning: Cannot modify...」とエラーが出た場合の解決方法を丁寧に解説。同じ事象の表示がでた場合にはこのブログで紹介している方法を参考に対応してみてください。
https://junpeko.com/error1/https://wp-doctor.jp/blog/2016/03/08/wordpress-%E3%83%AF%E3%83%BC%E3%83%89%E3%83%97%E3%83%AC%E3%82%B9%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E8%A7%A3%E8%AA%AC%EF%BC%9Awarning-cannot-modify-header-information-headers-already-sent-by/
WordPressマルチサイトのメリット・デメリット・設定方法
先週の記事「マルチサイトにも対応! WordPressサイトアドレスからディレクトリ名『/wp』を消す方法」、そして先々週の記事「プラグインを使わず行う WordPressマルチサイトのサーバー移行と気を付けるべきポイント」と、WordPressのマルチサイトに関連した記事を書いてきましたが、マルチサイトそのものの説明...

 

コメント