WordPressの更新後、突然サイトが真っ白になり、「Cannot redeclare is_sitemap()」というエラーが表示されることがあります。
これは、XMLサイトマップ用プラグインが定義している関数名と、WordPress 7.1側で追加・使用される関数名が重複したことによる可能性が高いトラブルです。
結論からいうと、まずは問題のプラグインを一時停止してサイト表示を復旧し、その後にプラグインの更新・差し替え・修正版の適用を検討するのが安全です。WordPress本体のファイルを直接書き換える対応は避けましょう。
表示されているエラーの意味
今回のエラーは次の内容です。
Fatal error: Cannot redeclare is_sitemap() (previously declared in /wp-includes/query.php:693) in /wp-content/plugins/xml-sitemap-feed/xml-sitemap.php on line 317
「Cannot redeclare」は、すでに定義済みの関数をもう一度定義しようとした場合に発生するPHPの致命的エラーです。今回のケースでは、WordPress本体の/wp-includes/query.phpですでにis_sitemap()が定義されたあと、xml-sitemap-feedプラグインも同名のis_sitemap()を定義しようとして停止しています。
つまり、サイトマップの設定内容や投稿データが壊れたわけではなく、WordPress本体とプラグインの関数名が衝突していることが直接の原因です。
まず行うべき復旧手順
- バックアップを確保する
作業前に、ファイルとデータベースのバックアップを取得します。すでにサイトが表示されない場合でも、復旧作業中の追加トラブルに備えて保全しておくことが重要です。 - 問題のプラグインを一時停止する
管理画面に入れる場合は、「プラグイン」からXML Sitemap Feed関連のプラグインを停止します。管理画面にも入れない場合は、FTPまたはサーバーのファイルマネージャーで/wp-content/plugins/xml-sitemap-feed/フォルダ名を一時的に変更します。例として、xml-sitemap-feed-disabledのように変更すると、WordPressは当該プラグインを読み込めなくなります。 - サイトが再表示されるか確認する
トップページ、主要な固定ページ、投稿ページ、管理画面を確認します。プラグイン停止後に正常表示へ戻る場合、関数名の重複が原因である可能性がさらに高まります。 - プラグインの互換版を確認する
WordPress 7.1に対応した更新版が提供されている場合は、公式配布元または開発元の案内に従って更新します。更新情報がない場合は、別のサイトマップ機能への移行も選択肢です。
急ぎで暫定復旧する際の考え方
サイトが閲覧できない状態は、問い合わせや予約の取りこぼし、既存顧客からの信用低下につながるおそれがあります。そのため、サイトマップ機能を一時的に止めてでも、まず通常ページを表示できる状態へ戻す判断が有効です。
一時停止中はXMLサイトマップの自動生成が止まる可能性がありますが、短期間であれば、一般的にはサイト全体が直ちに検索結果から消えるわけではありません。ただし、長期化させず、互換性のある運用方法へ切り替えることが大切です。
コードを修正する場合の注意点
保守担当者や開発者が対応できる場合、プラグイン側の関数定義に重複防止の条件を付ける方法があります。
考え方の例は次のとおりです。
317行目付近
if(!function_exists('is_sitemap')) { // ★追加:既に'is_sitemap'関数が存在する場合は下記の定義をスルーする
function is_sitemap() {
global $xmlsf;
if ( ! is_object( $xmlsf ) || $xmlsf->request_filtered === false ) {
_doing_it_wrong( __FUNCTION__, __( 'Conditional sitemap tags do not work before the sitemap request filter is run. Before then, they always return false.', 'xml-sitemap-feed' ), '4.8' );
return false;
}
return $xmlsf->is_sitemap;
}
} // ★追加:
この変更を加えることで関数宣言の重複エラーが消えます。
プラグインを更新することでWordPress 7.1に対応したコードに自動的に切り替わります。
ただし、この変更はあくまで暫定措置です。プラグイン独自のis_sitemap()にWordPress本体とは異なる処理が含まれている場合、単純に関数定義を省略すると別の不具合が出ることがあります。
そのため、この変更後はすぐにプラグインを更新することを推奨します。
WordPress本体の/wp-includes/query.phpを編集することは、セキュリティ更新や次回アップデートで問題が再発するため推奨できません。
再発を防ぐための運用ポイント
- 更新前にステージング環境で検証する
本番サイトの複製環境でWordPress、テーマ、プラグインの更新を試し、表示やフォーム、サイトマップを確認します。 - 自動更新の対象を把握する
サイト管理者が操作していなくても、WordPress本体・プラグイン・サーバー環境の自動更新が影響する場合があります。 - 復元可能なバックアップを定期取得する
取得だけでなく、必要なときに戻せる状態かを定期的に確認します。 - 外形監視を導入する
外形監視とは、外部からサイトを定期チェックし、ページが開けない場合に通知する仕組みです。障害の早期発見に役立ちます。 - 重要プラグインの更新状況を確認する
長期間更新されていないプラグインは、WordPress本体の変更に追随できず、今回のような互換性問題を起こす可能性があります。
まとめ
WordPress 7.1への更新後に発生したCannot redeclare is_sitemap()エラーは、XML Sitemap FeedプラグインとWordPress本体が同じ関数名を使ったことによる競合と考えられます。
- 最優先は、問題のプラグインを停止してサイト表示を復旧すること
- WordPress本体は編集せず、プラグインの互換版・修正版を確認すること
- コード修正は暫定対応にとどめ、正式な更新または代替手段を検討すること
- 今後はバックアップ、検証環境、監視を整え、更新による停止リスクを下げること
管理画面へ入れない、プラグイン停止後も復旧しない、または復旧作業に不安がある場合は、サーバーやWordPressのアクセス情報を準備したうえで、保守担当者へ早めに相談するとスムーズです。
