エラーの概要
wp-adminで外観 → テーマ → 新規追加 → テーマのアップロードから.zipファイルを選択してインストールをクリックすると、WordPressが次のエラーを表示します:
The package could not be installed. The theme is missing the style.css stylesheet.
テーマはインストールされません。WordPressはパッケージを完全に拒否します — 部分的なファイルも、有用なロールバックメッセージも表示されず、ただ処理が止まるだけです。
原因
WordPressは展開されたzipのルートにstyle.cssがあるかどうかを確認します。このファイルが存在し、かつ有効なテーマヘッダーコメントが含まれていなければなりません。どちらの条件が欠けていても、WordPressはインストールを拒否します。
実際には、次の4つの原因が考えられます:
- zipの構造が誤っている — zipにラッパーフォルダが含まれているため、WordPressが
my-theme/style.cssではなくmy-theme/my-theme/style.cssに展開してしまう。 - GitHubのソースzip — リポジトリの「Download ZIP」では、
style.cssがルートではなくdist/やsrc/などのサブディレクトリに置かれていることが多い。 - テーマヘッダーが欠けている —
style.cssは存在するが、ファイル先頭のコメントブロックに必須のTheme Name:行がない。 - 誤ったフォルダをzip化した — テーマフォルダを含む親フォルダを誤ってzip化してしまい、ネストが一段余分に増えている。
修正1:zipの構造を確認して修正する
十中八九、これが原因です。アップロードする前に、zipの中身を確認してください。
macOS/Linuxの場合:
unzip -l my-theme.zip | head -20
Windowsの場合は、エクスプローラーまたは7-ZipでZipファイルを開き、トップレベルの内容を確認してください。
正しい構造(期待される状態):
my-theme/
my-theme/style.css
my-theme/index.php
my-theme/functions.php
...
エラーの原因となる構造(二重ネスト):
my-theme/
my-theme/my-theme/
my-theme/my-theme/style.css
my-theme/my-theme/index.php
...
二重ネストになっている場合は、正しいフォルダからzipを再作成してください:
# zipを展開する
unzip my-theme.zip
# 実際のテーマフォルダに移動する
cd my-theme/my-theme
# 内部から再パック — style.cssがzipのルートに来る
zip -r ../../my-theme-fixed.zip .
# my-theme-fixed.zip をアップロードする
修正2:GitHub / ソースリポジトリのzip
GitHubの「Download ZIP」はリポジトリ全体をまとめたものです — テーマだけではありません。多くのプレミアムおよびオープンソーステーマは、インストール可能なテーマをtheme/、dist/、src/などのサブディレクトリに格納しています。リポジトリのルートではなく、そのサブフォルダをzip化する必要があります。
- GitHubのzipをダウンロードして展開する。
style.cssが直接含まれているフォルダを見つける。- そのフォルダのみをzip化する:
# GitHubのzipを展開した後:
ls repo-main/
# → dist/ src/ README.md ...
ls repo-main/dist/
# → style.css index.php functions.php ← これが必要なもの
cd repo-main/dist
zip -r ../../my-theme.zip .
# my-theme.zip をアップロードする
また、リポジトリのダウンロード内に既製のmy-theme.zipが含まれている場合があります。それが通常WordPress用に用意されたものです — 手動で再パックする前に確認してみてください。
修正3:style.cssのヘッダーを追加または修正する
テーマヘッダーがないstyle.cssは、ファイルが存在しないのと同様に問題です。WordPressはヘッダーを読み取ってテーマを登録する必要があります。style.cssを開き、ファイルの先頭が次のようになっているか確認してください:
/*
Theme Name: My Theme
Theme URI: https://example.com/my-theme
Author: Your Name
Author URI: https://example.com
Description: A short description of the theme.
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: my-theme
*/
技術的には、Theme Name:だけが必須の行です。他はすべて任意ですが、記入しておくことが推奨されます。ヘッダーを追加したら、再zip化して再度アップロードしてください。
修正4:FTP経由でインストールする
wp-adminのアップローダーに手間取っていますか?FTP/SFTPを使って完全に回避し、テーマフォルダを直接wp-content/themes/に配置してください:
# SFTPで接続する
sftp user@your-server.com
# テーマディレクトリに移動する
cd /var/www/html/wp-content/themes/
# テーマフォルダを直接アップロードする
put -r /local/path/to/my-theme .
rsyncを好む場合:
rsync -avz /local/path/to/my-theme/ user@your-server.com:/var/www/html/wp-content/themes/my-theme/
アップロード後、wp-adminの外観 → テーマにアクセスすると、テーマが表示されそのまま有効化できます — アップロードダイアログは不要です。
修正5:WP-CLI(SSHアクセスがある場合の最速方法)
SSHアクセスがある場合、WP-CLIが最もクリーンな選択肢です:
# ローカルのzipからインストールする
wp theme install /path/to/my-theme.zip --activate
# スラッグでWordPress.orgからインストールする
wp theme install twentytwentyfour --activate
# インストール済みテーマを確認する
wp theme list
WP-CLIは、パッケージに問題がある場合にwp-adminよりもはるかに有用なエラー出力を提供します。
確認
修正してアップロードした後:
- 外観 → テーマに移動する — テーマカードに名前とスクリーンショットが表示されるはずです。
- 有効化をクリックする — 新しいテーマが適用された状態でサイトが読み込まれるはずです。
- フロントエンドにアクセスして、レイアウトが正しく表示されることを確認する。
- 外観 → カスタマイズを開き、エラーなく読み込まれることを確認する。
テーマは有効化されたがサイトの表示が崩れている場合、それは別の問題です — 必要なプラグインの不足、親テーマのない子テーマなどが考えられます。このアップロードエラーとは関係ありません。
予防策
- アップロード前に確認する — wp-adminを触る前に、ローカルで
unzip -l theme.zip | head -5を実行して構造が正しいことを確認する。 - GitHubではなくベンダーのダッシュボードからダウンロードする — プレミアムテーマのベンダーはインストール可能なzipを正しくパッケージ化しています。GitHubのソースzipはほぼ例外なく正しくありません。
- パッキングを自動化する — 独自テーマを開発している場合、Makefileターゲットを使えば常に正しいディレクトリからzip化できます:
# Makefileターゲットの例
pack:
cd .. && zip -r my-theme.zip my-theme/ --exclude "my-theme/.git/*" --exclude "my-theme/node_modules/*"
mv my-theme.zip my-theme/dist/

