【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 に含まれていない古いテーマを削除しておくと良さそうです。親テーマなどとして使っていなければ、ですが。
こんな記事も読んでみませんか?
- 【WordPress】W3TCが原因で文字化けする場合の対処
- SassがBOM付きCSSを吐いて先頭のCSS定義が効かなかった件(BOM付きPHPをincludeしつつBOMを削除する方法)
- AMPプラグインで"タグ「script amp-onerror」内の必須のテキストがないか、正しくありません。"エラーが出たので対処
- 【WordPress】画像の特定サイズのsrcset要素だけ無効化・削除する方法
- WordPress 4.7系に対応したW3 Total Cacheプラグインがリリース
- 【PHP・WordPress】HTTPヘッダの削除・追加に便利なheader_register_callback()関数