WordPressデータベースを一括でアップデートするWebプログラム作りました

この記事は約10分で読めます。

サーバーにある複数のWordPressサイトをパソコン上のXAMPPで動かすための作業をしていました。データベースはサイトのURLに関する部分を修正しないとちゃんと動きません。UPDATE文自体は数行なのでテキストエディタで置換を繰り返せば済みますが、それを複数サイト分やっていると面倒になってきました。今後も同じことをする場合がきっとあると思うのでちょっとプログラムにしてみました。

WordPressサイトを別の場所で動かそうとするときのUPDATE文とは

WordPressサイトを別の場所で動かそうとするときのUPDATE文は、

WordPressのバックアップをBackWPupで!その3

などにも書いてあって、その作業をするたびにこのblogからコピーして(自分でもblogから見るのが早いので(^_^;)、秀丸などにペーストして元のURLと新しいURLを置換して、それをphpMyAdminなどで流していました。

たったそれだけなのですが複数サイト分やるといやになります(^_^;

一括でアップデートするWebプログラムを作りました

まずは作ったものをサーバに上げてみました

https://usortblog.com/blog_sample/tools/wordpress_iten.php

* 2015/06/04現在

使い方としては入力箇所が3カ所あって、

プレフィックス(任意。大概の場合はwp_がプレフィックスなので入力しない)
現在のサイトURL(必須。現在のというかコピー元のURL)
変更後のサイトURL(必須。コピー先で使うURL)

となっています。

必須部分を入力して 送信 をクリックすると、

UPDATE文が下のtextareaに表示されます。これをコピーしてphpMyAdminなどで流してください。

その後に画面に書いてあるように、

ダッシュボード 設定>パーマリンク設定 で 変更を保存 をクリックする。

をします。

このプログラムで使ったPHPの部分について

このプログラムで使ったPHP部分の解説をします。これからPHPを始めようかなとか初心者さんにはちょっと役立つかもしれません(^^)。それ以外の方にはあまり面白くないかもしれません。

このプログラムのソース全文は

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">

<!-- Optional theme -->
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<style type="text/css">
<!--
body {
font-family: Helvetica, Arial, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', Meiryo, メイリオ, sans-serif;
}
--> 
</style>
</head>
<body>
<?php
$updateStringArray = Array();
$updateStringArray[] = '
UPDATE `%s_options` SET option_value = REPLACE (option_value, "%s", "%s");';
$updateStringArray[] = '
UPDATE `%s_postmeta` SET meta_value = REPLACE (meta_value, "%s", "%s");';
$updateStringArray[] = '
UPDATE `%s_posts` SET post_content = REPLACE (post_content, "%s", "%s");';
$updateStringArray[] = '
UPDATE `%s_posts` SET guid = REPLACE (guid, "%s", "%s");';
?>
<div style="width:70%;margin-left : auto ; margin-right : auto ;">
<p class="bg-primary" style="margin-top:10px;padding:10px;font-weight:bold;font-size:1.5em">WordPress移転時のDBアップデート文作成</p>
<form method="post">
<div class="form-group">
<label style="width:200px;">プレフィックス</label><input type="text" name="prefix" value="<?php echo editPost('prefix');?>">_
<br />大概はwp_です。その場合は未入力で。もし変更している場合だけ記入してください。<br />
</div>
<label style="width:200px;">現在のサイトURL</label><input type="text" name="currentUrl" value="<?php echo editPost('currentUrl');?>">
例:https://usortblog.com<br />
<label style="width:200px;">変更後のサイトURL</label><input type="text" name="changeUrl" value="<?php echo editPost('changeUrl');?>">
例:http://localhost/blog<br />
<br />
<input type="submit" name="submit" class="btn btn-primary" value="送信">
</form>
<?php
$updateString = '';
$errorMessage = '';
if (isset($_POST['submit'])) {
    // 送信が押されたとき
    if((editPost('currentUrl') != '') AND (editPost('changeUrl') != '')){
        // 更新用のupdate文を表示する
        $prefix = 'wp';
        if($_POST['prefix'] != ''){
            $prefix = $_POST['prefix'];
        }
        foreach($updateStringArray as $string){
            $updateString .= sprintf($string, $prefix, $_POST['currentUrl'], $_POST['changeUrl']);
        }
    } else {
        $errorMessage = '現在のサイトURLと変更後のサイトURLは両方とも記入してください。';
    }
}
if($errorMessage != ''){
?>
<p class="bg-danger"><?php echo $errorMessage;?></p>
<?php
}
?>
<textarea class="form-control" rows="8"><?php echo $updateString;?></textarea>
↑このSQL文をコピーしてphpMyAdminなどで流してupdateします
<div style="margin-top:10px;padding:10px;background-color:pink;border:1px dotted deeppink">
SQL文を流してupdateしたあとにやること:ダッシュボード 設定>パーマリンク設定 で 変更を保存 をクリックする。
</div>
<?php
function editPost($postName){
    if (isset($_POST[$postName])){
        return $_POST[$postName];
    }
    return '';
}
?>
</div>
</body>

こんな感じです。

UPDATE文の指定

$updateStringArray = Array();
$updateStringArray[] = '
UPDATE `%s_options` SET option_value = REPLACE (option_value, "%s", "%s");';
…

あとで増えたり減ったりしてもコードを書き換えなくていいようにと思いARRAYにしました。

書き換えは、

        foreach($updateStringArray as $string){
            $updateString .= sprintf($string, $prefix, $_POST['currentUrl'], $_POST['changeUrl']);
        }

のようにARRAYにある要素をぐるぐる自動的に回して処理をするので増えたり減ったりしても大丈夫になってます。

formからpostされて来た値を使いますが、最初の読み込み時などに要素があると思ってコーディングしてあると、ないときにwarningになってしまいます。
そのために直接 $_POST[‘フィールド名’] を使わずに editPost という関数を通して見るようにしています。

そのeditPostという関数では

function editPost($postName){
    if (isset($_POST[$postName])){
        return $_POST[$postName];
    }
    return '';
}

$_POST$postNameで指定された要素があればその要素の値を返して、無い場合は ” 空白を返します。関数にしておくと同じコードを何度も書かなくて済むので手間が省ける共にバグも防げますね(^^)/。

このプログラムで使ったbootstrap(ブートストラップ)とかの部分について

最初は適当にPHPで作って動作としてはできあがったのですが、自分で何度も使おうと思うツールは見た目もきれいでないとテンションがあがりません。といことでbootstrapを使って簡単にちょっと見た目をよくしてみました。

最初はこんな感じで、ちょっと気持ちが上がらないかんじです。これをbootstrap(ブートストラップ)とcssの指定をすることでよくしてみました。

例えば

<p class="bg-primary" style="margin-top:10px;padding:10px;font-weight:bold;font-size:1.5em">WordPress移転時のDBアップデート文作成</p>

タイトルに class=”bg-primary” とすることでバックカラーが青くなりました。あとはpaddingやmargin-topなどを指定してタイトルっぽくしました。

送信ボタンは class=”btn btn-primary”と指定することで青いボタンになります。

その他、bloogstrapを指定してあるだけで入力エリアが角丸になったりもしています。

まとめ:Webサービスっていうのかな(^_^;

こういうものってWebサービスっていうのかな?言うんでしょうか?まぁとにかくこういう割とたくさんの人が使えそうなちょっとしたものを作りたいなと思います。

UPDATE文は他にもあるかもしれませんし、なにかご意見ご感想などありましたらお気軽にコメントください(^^)/

兎本美佳

ブログを見た人がそのままできたらいいなと思って、できるだけ丁寧に書いています。blogに書いたようなネタの有償対応のご相談は「ゆうそうと」へいただければと思います(^^)/
無償での対応をご希望の場合は、コメントをいただけましたら可能な場合はコメントを返させていただきます。

ゆうそうとITブログの更新通知が受け取れます!
スポンサー広告

WordPress 全般 css php インターネット 開発言語
スポンサーリンク
ゆうそうとITブログの更新通知が受け取れます!
ゆうそうとITブログ

コメント

トップへ戻る

ゆうそうとについての説明

ゆうそうと とは東京都八王子市を中心として、WordPressによるWEBサイトの作成や、スポットでのIT相談を行ったり、年間契約でのIT顧問をなりわいとして活動しています。

特徴としては30年以上IT業界でプログラムを中心として仕事をしてきたものと、美大出身のデザイナーがワンストップで対応するため、幅広い対応が可能であることです。

IT相談は直接お会いしてのご相談の他、ZOOMによるオンライン相談も可能です。