WordPressのテーマを強制的にデフォルトに戻す方法

[2015.9.16追記]
久しぶりにこのスクリプトを使う事案が起きたので、最新のデフォルトテーマ(Twenty Fifteen)で試したところうまくいきました。

[2012.10.22追記]
WordPressの関数 update_option() を使う、よりすっきりしたコードを追記しました

[2012.10.29追記]
「WordPressアドレス(URL)」と 「サイトアドレス (URL)」をデフォルトに戻す方法もまとめました。

テーマをいろいろ切り替えて遊んでいるうち、うっかりバギーなテーマを掴んでどうにもならなくなったときにデフォルト(記事執筆時点では『Twenty Eleven』)に戻すスクリプトを紹介します。当初は、データベースを直接操作する方法を載せようと思ったのですが、汎用性を高めるためにPHPスクリプトにしてしまいました。

以下のスクリプトを reset.php の名前で保存して(もちろん文字コードはUTF-8ね)インストールディレクトリ(wp-config.php と同じ階層)にアップロードしましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テーマをデフォルトに戻すよ</title>
</head>

<body>
<p>
<?php
$dir = dirname( __FILE__ ) . '/';

if ( file_exists( $dir . 'wp-config.php' ) ) {
	require_once( $dir . 'wp-config.php' );
}
else {
	die( '同じディレクトリに wp-config.php が存在しません。' );
}

$connect = mysql_connect( DB_HOST, DB_USER, DB_PASSWORD );
mysql_select_db( DB_NAME, $connect );
mysql_query( 'UPDATE `' . $table_prefix . 'options` SET `option_value` = "Twenty Eleven" WHERE `option_name` = "current_theme"', $connect );
mysql_query( 'UPDATE `' . $table_prefix . 'options` SET `option_value` = "twentyeleven" WHERE `option_name` = "template"', $connect );
mysql_query( 'UPDATE `' . $table_prefix . 'options` SET `option_value` = "twentyeleven" WHERE `option_name` = "stylesheet"', $connect );
mysql_close( $connect );

echo 'テーマをデフォルトに戻しました。';
?>
</p>
</body>
</html>

アップの後 WordPressアドレス/reset.php にアクセスして「テーマをデフォルトに戻しました。」のメッセージが出ればオッケイです 🙂

[2012.10.22追記]
PHPの mysql_connect() でなくWordPressの update_option() 関数を使うとコードがよりすっきり(することが今さらながらわかりました)。wp-content/themes/foo 内のテンプレートファイルでなくてもあらかじめ wp-load.php を読み込むことでWordPressの関数を使えますよ。

……ということですっきり版のコード。
({default theme name} はデフォルトテーマ名〔例:Twenty Eleven〕 {default theme directory name} はデフォルトテーマのディレクトリ名〔例:twentyeleven〕に読み替えてください)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テーマをデフォルトに戻すよ</title>
</head>

<body>
<p>
<?php
$dir = dirname( __FILE__ ) . '/';

if ( file_exists( $dir . 'wp-load.php' ) ) {
	require_once( $dir . 'wp-load.php' );
}
else {
	die( '同じディレクトリに wp-load.php が存在しません。' );
}

update_option( 'current_theme', '{default theme name}' );
update_option( 'template', '{default theme directory name}' );
update_option( 'stylesheet', '{default theme directory name}' );

echo 'テーマをデフォルトに戻しました。';
?>
</p>
</body>
</html>

「WordPressのテーマを強制的にデフォルトに戻す方法」への7件のフィードバック

  1. 始めまして。山本と申します。php全くわからずの素人です。教えてください。
    2つとも試して見たのですが、どちらも13行目でsyntax errorとなります。
    Wordpressのバージョンは4.7.2です。
    よろしくお願いいたします。

    1. 山本さん

      記事、ご覧くださりありがとうございます。
      WordPress 4.7.2 を PHP 7.0.7 環境のレンタルサーバで後の方のスクリプトを試してみたところ問題なく動きました。
      13行目での Syntax Error とのことですが、if 文の開き/閉じカッコの数などは一致してますでしょうか?

  2. お返事ありがとうございます。
    いろいろやっていましたら、今度は以下のエラーに変わりました。

    Parse error: syntax error, unexpected T_STRING in /home/******/public_html/******.com/reset.php on line 17

    最初はこちらのサイトのものをコピーペーストして使わせて頂いたら13行目でのsyntaxエラーだったのですが、phpのところを打ち直しましたら17行目でのエラーになりました。

    記述のミスも何度も見直しているのですが、発見出来ません。

  3. たびたび恐れ入ります。
    2つ目のスクリプトでいろいろやった結果、スクリプトでのsyntax error は無くなりましたが、デフォルトのテーマに戻らず変更に失敗したテーマのエラーが表示されています。
    ドキュメントルートと同じエラーです。

    1. スクリプトでうまくいかない原因がつかみかねるのですが、phpMyAdminなどを介してデータベースに直接アクセスできるなら、当該WordPressが使っているデータベースの wp_options テーブルを開いていただき

      current_theme … Twenty Seventeen (空白にご注意)
      template … twentyseventeen
      stylesheet … twentyseventeen

      と直接書き込まれた方がよいかもしれないですね。

  4. いろいろありがとうございました。

    phpMyAdminを使って直接書き込みをし、解決いたしました。
    これで、今後新しいテーマでエラーになっても大丈夫です。
    本当にありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です