ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
なぜ絵文字が「??」になるのか
WordPress のデフォルト MySQL 文字セットは古いインストールでは utf8 でした。MySQL の utf8 は最大 3 バイトまでしか格納できず、絵文字 (例: U+1F600) はUTF-8 で 4 バイト必要なため、保存時に「?」「??」に置換されてしまいます。
4 バイト文字を扱うには MySQL の utf8mb4 (mb4 = multi-byte 4 bytes) に変換する必要があります。WordPress 4.2 以降は新規インストール時に utf8mb4 が既定ですが、古い時期に作られたサイトは utf8 のまま残っているケースが多いです。
現状確認
-- DB の charset
SELECT default_character_set_name
FROM information_schema.SCHEMATA
WHERE schema_name = 'wordpress';
-- utf8mb4 / utf8 のいずれか
-- テーブル別
SELECT table_name, table_collation
FROM information_schema.TABLES
WHERE table_schema = 'wordpress';
-- カラム別
SELECT table_name, column_name, character_set_name, collation_name
FROM information_schema.COLUMNS
WHERE table_schema = 'wordpress'
AND data_type IN ('varchar','text','mediumtext','longtext');
対処手順 (全体像)
- DB バックアップ (mysqldump)
wp-config.phpのDB_CHARSETをutf8mb4に- DB と全テーブル・全カラムを utf8mb4 に変換
- 動作確認 (絵文字を含むコメント投稿)
STEP 1: バックアップ
# 必ず先にダンプ
mysqldump -u wpuser -p \
--default-character-set=utf8mb4 \
--single-transaction \
wordpress > wp-backup-$(date +%F).sql
STEP 2: wp-config.php の編集
// wp-config.php
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', ''); // 既定 (utf8mb4_unicode_ci) で OK
STEP 3: DB の変換
方法 A: SQL 直接
-- DB 全体
ALTER DATABASE wordpress
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 全テーブルとカラムを変換
ALTER TABLE wp_comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_commentmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_postmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_usermeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_options CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_terms CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_term_taxonomy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_termmeta CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE wp_links CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
方法 B: WP-CLI (推奨)
# WP-CLI で一括 (テーブル列挙が不要)
wp db query "ALTER DATABASE \`$(wp config get DB_NAME)\` \
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 全テーブル一括変換
for table in $(wp db tables --format=csv); do
wp db query "ALTER TABLE \`$table\` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
done
# 確認
wp db query "SHOW TABLE STATUS" | awk '{print $1, $15}'
方法 C: 一括変換スクリプト生成
-- ALTER TABLE 文を SQL で生成
SELECT CONCAT(
'ALTER TABLE `', table_schema, '`.`', table_name,
'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) AS stmt
FROM information_schema.tables
WHERE table_schema = 'wordpress'
AND table_type = 'BASE TABLE';
InnoDB 設定 (古い MySQL 5.6 のみ要対応)
MySQL 5.6 / MariaDB 10.0 系では utf8mb4 のインデックス (varchar(255)) で「Row size too large」エラーが起きやすく、以下の設定が必要でした:
# /etc/mysql/my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_file_per_table = ON
innodb_file_format = Barracuda
innodb_large_prefix = ON
innodb_default_row_format = DYNAMIC-- 既存テーブルを DYNAMIC へ
ALTER TABLE wp_posts ROW_FORMAT=DYNAMIC;
MySQL 5.7+ / 8.0 / MariaDB 10.2+ はこれらが既定なので、新しい環境では考慮不要です。
動作確認
# 投稿 → 絵文字付きコメントを投稿
# DB を直接見て 4 バイト文字が入っているか
mysql -e "SELECT comment_content FROM wp_comments ORDER BY comment_ID DESC LIMIT 1;" \
wordpress --default-character-set=utf8mb4
関連: 絵文字 JS の自動読込を止める
WordPress は古い (絵文字未対応の) ブラウザ用に wp-emoji-release.min.js を全ページ自動で読み込みます。これは絵文字の表示用であり、絵文字の保存可否とは別物です。ページ速度のために止めたいだけなら:
// functions.php
add_action('init', function() {
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
});
あるいは「Disable Emojis」プラグインで同等効果。
コメントフォーム側の確認
コメント投稿フォームの <textarea> は通常 type 指定不要ですが、ページ全体のメタが charset=utf-8 になっているか念のため確認:
<head>
<meta charset="utf-8">
...
</head>
FAQ
Q: 変換中に「Index column size too large」
A: MySQL 5.6 系。innodb_large_prefix=ON + innodb_file_format=Barracuda + ROW_FORMAT=DYNAMIC を設定。
Q: 一部テーブルだけ utf8 のまま
A: WP-CLI の wp db search-replace や information_schema で対象を再洗い出し → 個別 ALTER TABLE。
Q: 既存のコメントの「??」は復元できる?
A: 不可。元の絵文字情報は破棄されています。変換後の新規投稿から保存可能になります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Scratch 作品の公開方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?