【WordPress】「現在のテーマ」を管理画面でなくコードで強制変更(設定の上書き)する方法

 2024年8月6日

WordPress で問題があるテーマに切り替えてエラーが出るようになってしまった場合、管理画面もエラーで使えなくなりテーマを元に戻せなくなるケースがあります。

今回は、そんな場合に使える「現在のテーマ」を強制変更できるコードを紹介します。

コードは WordPress のインストールディレクトリ( "wp-config.php" がある場所)に設置。ファイル名は任意ですが、例えば「themeconv.php」などとします。(拡張子は .php)

$new_theme 変数に切替え先テーマのディレクトリ名を入れて使ってください。

WordPress のデータベースを上書きするので、事前にバックアップを取っておくと良いでしょう。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Force theme conversion</title>
</head>
 
<body>
<p>
<?php
$dir = dirname( __FILE__ ) . '/';

// requires wp-config.php
if ( file_exists( $dir . 'wp-config.php' ) ) {
    require_once( $dir . 'wp-config.php' );
}
else {
    die( 'wp-config.php is not found in the same directory.' );
}

// directory name of active theme 
$new_theme = "twentytwentyfour";

// Create connection
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Prepare SQL statement to update active theme, using dynamic table prefix
$sql = "UPDATE " . $table_prefix . "options SET option_value = ? WHERE option_name IN ('template', 'stylesheet')";

// Prepare statement
$stmt = $conn->prepare($sql);

// Check if statement preparation was successful
if ($stmt === false) {
    die("MySQL prepare error: " . $conn->error);
}

// Bind the new theme name to the prepared statement
$stmt->bind_param("s", $new_theme);

// Execute the statement
if ($stmt->execute()) {
    echo "Theme updated successfully to $new_theme";
} else {
    echo "Error updating theme: " . $stmt->error;
}

// Close statement
$stmt->close();

// Close connection
$conn->close();
?>

</p>
</body>
</html>
Code language: HTML, XML (xml)

ブラウザからこの PHP ファイルを実行して、"Theme updated successfully to ~" と表示されればテーマの強制変更は成功です。

コードの動作確認は WordPress 6.6.1 / PHP 8.2 で行っています。また mysqli 拡張機能を利用しています。あまり無いと思いますが、WordPress 4.8 以前などの古いバージョンでは、option_name = 'current_theme' の更新も必要かもしれません。

WordPress は長い歴史を持つ CMS ですが、古いデフォルトテーマの中には最近の PHP では動作しないコードを含むものもあります。誤ってそういったテーマに切り替えてしまった場合に今回の方法が役立つことでしょう。

また、このような症状に遭遇したときは、最新の WordPress に含まれていない古いテーマを削除しておくと良さそうです。親テーマなどとして使っていなければ、ですが。

Hatena Pocket Line

コメントを記入