運営者プロフィール

WordPressで記事中の単語を一瞬で一括置換する方法

ども。あいしんくいっと(@ithinkitnet)です。

本ブログ「あいしんくいっと」はWordPressを使ってブログ運営しているのですが、ある時に記事内の文字を一括置換したくなりました。

具体的には、「嫁」「妻」へと単語を置き換えたいな、と。

なぜそう思ったかというのは、以下の書き込みを読んだからなんですけどね。

公的な場では「妻」が一般的です。
これは「嫁」という字が「新婚さん」というニュアンスを含むためで、安定した生活を送っている夫婦が用いるには不自然だからです。

参考 自分の奥さんのことを、「妻」ではなく「嫁」と呼ぶのは良くないのですか?

どうやら、公共の場では「妻」と呼ぶのが一般的らしい。
まぁ、前から”嫁”って言うのは自分でも「どうかなー?偉そうかなー?」なんて思ってたんですけどね。

とは言え、本ブログ記事も300記事を超え、過去に「嫁」という単語を連発しまくっていたというのも認識している・・・(笑)
軽く検索しただけでも、Oh・・・、出るわ、出るわ♪
89016fe1-0dff-4522-8286-ea1fc8688868
「おー、これはやべぇ。これをひとつずつ記事を手直しするなんて所業は恐ろしくて考えられねー。」

というワケで、記事中の単語を一括置換する方法を考えてみることにしました。

WordPressには一括置換出来る「Search Regex」といったプラグインもあるみたいなんですけどねー。
プラグインは極力というか、むしろ入れたくないので却下、却下ーw

それ、SQLコマンド「UPDATE」で一発で出来るってよ!

最初は「DBデータをエクスポートして、一括置換して、またインポートして・・・」といった方法を検討していたのですが、わざわざDBデータをエクスポートしなくとも、「UPDATEコマンドを使うことで直接、レコード内の文字を一括置換出来るらしい」ということが分かりました。

とは言え、にわかDBの知識しかないんで調べながらやるのに手間取りましたよ~っと。

DBについての知識があれば、簡単に出来るんでしょうけどね。
調べてみたところ、大体のサイトではこんな風に書かれてました。

UPDATE `テーブル名` SET カラム名 = REPLACE(カラム名,”置き換え文字”,”置き換え後文字”);

参考 (MySQL)文字列を一括置換するREPLACE関数

しか~し、そもそもコマンド発行まで行き着くまでの過程が分からぬ・・・。

と言うことで、詳細な手順を残しておきたいと思いまーす。
ただし、DBにログインしてSQLコマンドが発行できるレベルであることが前提ですが・・・。

※ DBデータを弄るのは大変危険ですので、DBデータのバックアップはお忘れなく!

WordPressで記事中の単語を一瞬で一括置換する方法

DB内の文字列を一括置換する方法

まず、DB一覧を参照してWordPress用のDBを確認します。

  • データベース一覧確認

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ithinkitnet |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

私の環境だと「ithinkitnet」が該当します。

使用するDBを選択します。

  • データベース指定

MariaDB [(none)]> use ithinkitnet
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

次に書き換え対象となるテーブル名を確認します。

  • テーブル確認

MariaDB [ithinkitnet]> SHOW TABLES FROM ithinkitnet;
+------------------------+
| Tables_in_ithinkitnet |
+------------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_popularpostsdata |
| wp_popularpostssummary |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+------------------------+
14 rows in set (0.00 sec)

確認したところ、WordPress では「wp_posts」テーブルに記事が格納されているようなので、「wp_posts」テーブルが対象のテーブルとなります。

次に「wp_posts」テーブルのカラム名を確認します。


MariaDB [ithinkitnet]> show columns from wp_posts;
+-----------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------------------+----------------+
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_author | bigint(20) unsigned | NO | MUL | 0 | |
| post_date | datetime | NO | | 0000-00-00 00:00:00 | |
| post_date_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
| post_content | longtext | NO | | NULL | |
| post_title | text | NO | | NULL | |
| post_excerpt | text | NO | | NULL | |
| post_status | varchar(20) | NO | | publish | |
| comment_status | varchar(20) | NO | | open | |
| ping_status | varchar(20) | NO | | open | |
| post_password | varchar(20) | NO | | | |
| post_name | varchar(200) | NO | MUL | | |
| to_ping | text | NO | | NULL | |
| pinged | text | NO | | NULL | |
| post_modified | datetime | NO | | 0000-00-00 00:00:00 | |
| post_modified_gmt | datetime | NO | | 0000-00-00 00:00:00 | |
| post_content_filtered | longtext | NO | | NULL | |
| post_parent | bigint(20) unsigned | NO | MUL | 0 | |
| guid | varchar(255) | NO | | | |
| menu_order | int(11) | NO | | 0 | |
| post_type | varchar(20) | NO | MUL | post | |
| post_mime_type | varchar(100) | NO | | | |
| comment_count | bigint(20) | NO | | 0 | |
+-----------------------+---------------------+------+-----+---------------------+----------------+
23 rows in set (0.00 sec)

今回は記事中の文字を置き換えるので、置き換え対象となるカラム名は「post_content」になります。

では、最後に文字を置き換えます。
上記で得た情報を鑑みた結果、以下のSQLコマンドで置き換えることが出来ました。
ここは重要なのでコマンド例も書いておきましょう。

  • 一括置換

UPDATE `テーブル名` SET カラム名=REPLACE (カラム名,”置換対象文字”,”置換後文字”);


MariaDB [ithinkitnet]> UPDATE `wp_posts` SET post_content = REPLACE(post_content,"嫁","妻");
Query OK, 148 rows affected (3.13 sec)
Rows matched: 7792 Changed: 148 Warnings: 0

えー、148箇所におよぶ「嫁」→「妻」への文字列置換がほんの数秒で完了しました。

いやー、やっぱSQLコマンド最強だわ!

置き換え後確認

置き換え前は「嫁」と検索すると、結果がわんさかと表示されたのですが、置き換え後は表示されず。
(タイトルに含まれていたのは別途修正していますw)
e4e317e3-81c3-4f9f-ad39-0becc51c7213
WordPressは記事データがDBに格納されているので、記事に対する修正はSQLコマンドで実行したほうが効率よく修正出来ますね。
ただし、DBはおろか、サーバにもログイン出来ない場合はWordPressプラグインに頼るしかなさそうですが・・・。

以上、あいしんくいっとでした。

コメントを残す

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

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)