WordPressの「The package could not be installed. The theme is missing the style.css stylesheet」を修正する方法

beginner📝 WordPress2026-05-22| WordPress 5.x / 6.x、wp-adminテーマアップローダー、任意のOS/ホスティング

Error Message

The package could not be installed. The theme is missing the style.css stylesheet.
#wordpress#テーマ#スタイルシート#アップロード#wp-admin

エラーの概要

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/

Related Error Notes