本家版、日本語版 WordPress のマルチバイト文字の取り扱いに関する不具合の累積的修正と強化を行うプラグインです。英語圏で作られた WordPress を日本語環境で正しく動作させるために必要となる機能を網羅していますので、なんらかの対策を行っていない場合は導入をおすすめします。
ダウンロード
WP Multibyte Patch 2.9
バージョン 2.9 は、本家版、日本語版の WordPress 5.2 以上に対応しています。詳細は、リリースノートをご覧ください。その他のバージョンについては、互換性対応表をご覧ください。
主な機能
投稿抜粋
「文字数ベース」抜粋の補助機能を提供します。抜粋の最大文字数と more 文字列を設定ファイルより変更できます。
文字列カウント方式の設定
言語設定が ja の場合、デフォルトで文字列カウント方式の設定を「文字数ベース」に固定します。
検索
検索の際に全角スペースを区切り文字として認識させます。また、検索文字列内の重複するスペースを取り除きます。
メール送信
送信メールのエンコーディングを JIS (ISO-2022-JP) 、UTF-8、自動判別の3つのモードから選ぶことができます。WordPress 本体の実装とは異なり、UTF-8 モードではボディ部も base64 エンコード (7bit) します。本機能はデフォルトではオフになっておりますので、ご利用の際は wpmp-config.php を編集して有効化してください。
トラックバック受信
日本語を含む多くのエンコーディングのデータが破壊される問題を修正します。
ピンバック受信
マルチバイト文字で書かれたページからのピンバック処理機能一式 (エンコーディング検出、変換、トリム) を実装します。
ファイル名サニタイズ
マルチバイトを含むファイル名のファイルがアップロード、またはメール添付された場合にファイル名を md5 に変換します。
フィード XML サニタイズ
フィードで出力される XML 1.0 で不正となる文字の除去と破損したマルチバイト文字の無害化を行い、検証時のエラーを防ぎます。本機能はデフォルトではオフになっておりますので、ご利用の際は wpmp-config.php を編集して有効化してください。
テーマの Web フォント無効化機能
一部のブラウザにおいて日本語表示の不具合が起こる問題の対応として、翻訳ファイルの有無に関わらず、以下テーマの Google フォントの読み込みを任意で無効化できる機能を提供します。
- Twenty Twelve
- Twenty Thirteen
- Twenty Fourteen
- Twenty Fifteen
- Twenty Sixteen
- Twenty Seventeen
管理パネル
- ダッシュボードの「コメント」、「下書き」の抜粋文字数を設定ファイルより変更できます。
- 投稿エディタのリンク挿入機能で、既存コンテンツの内部リンクを検索する際のインクリメンタルサーチを2文字から動作させます。
- 日本語フォントの表示にあわせ、管理パネルのイタリック体を標準に変えます。
BuddyPress 抜粋関数
bp_create_excerpt() でマルチバイト投稿の抜粋が作られない問題を修正します。HTML タグを取り除いた形の文字数ベースの抜粋を生成します。本機能はデフォルトではオフになっておりますので、ご利用の際は wpmp-config.php を編集して有効化してください。
ご注意: Activity の抜粋機能は表示時ではなく Activity データ記録時の実データに適用されます。また、抜粋化されるタイプとされないタイプの投稿があります。これらは BuddyPress の仕様によるものですのでご了承ください。
その他
設定ファイル (wpmp-config.php) から各パッチ機能を個別に有効化・無効化できます。
インストール
通常インストール
- ZIP を解凍し、
wp-multibyte-patch
フォルダを/wp-content/plugins
の中に入れてください。 - 管理パネルのプラグインページで WP Multibyte Patch を有効化してください。
mu-plugins ディレクトリへのインストール
wp-multibyte-patch
フォルダ、wpmp-load.php
ファイルを下記のように配置することでマルチサイトで WP Multibyte Patch を must-use plugin としてロードすることができます。
/wp-content/mu-plugins/wp-multibyte-patch
/wp-content/mu-plugins/wpmp-load.php
アップグレード
wp-multibyte-patch
フォルダの中身を新しいファイルで上書きしてください。
アンインストール
- 管理パネルのプラグインページで WP Multibyte Patch を停止してください。
wp-multibyte-patch
フォルダ、wpmp-config.php
を削除してください。データベースへの設定値の保存、ファイル生成等は行っておりません。
設定ファイル
デフォルトで標準的な設定値が割り当てられるようになっています。これらの設定値を変更する必要がある場合は、wpmp-config-sample-ja.php
を wpmp-config.php
に変名し内容を編集してから下記のように配置してください。(WP_CONTENT_DIR
を変更している場合はその中に置いてください。)
/wp-content/wpmp-config.php
デフォルト設定で問題がない場合はこれらの作業は必要ありません。
共通設定ファイル (wpmp-config.php) のデフォルト値と説明
$wpmp_conf['excerpt_mblength'] = 110;
wp_trim_excerpt() とその下流関数のマルチバイト文字数ベース抜粋時の最大文字数$wpmp_conf['excerpt_more'] = ' [...]';
抜粋末尾に出力される More 文字列$wpmp_conf['comment_excerpt_mblength'] = 40;
get_comment_excerpt() とその下流関数のマルチバイト文字数ベース抜粋時の最大文字数$wpmp_conf['mail_mode'] = 'JIS';
送信メールのエンコーディングのモードを、JIS、UTF-8、auto の中から選択 (日本語環境でのみ利用可)$wpmp_conf['dashboard_recent_drafts_mblength'] = 40;
ダッシュボード最近の下書きウィジェットのマルチバイト文字数ベース抜粋時の最大文字数$wpmp_conf['admin_custom_css_url'] = '';
管理パネルカスタム CSS の URL$wpmp_conf['bp_excerpt_mblength'] = 110;
BuddyPress の bp_create_excerpt() のマルチバイト文字数ベース抜粋時の最大文字数$wpmp_conf['bp_excerpt_more'] = ' [...]';
BuddyPress の bp_create_excerpt() で出力される More 文字列$wpmp_conf['patch_wp_mail'] = false;
メール送信機能のマルチバイトパッチの有効化 (true) 、無効化 (false)$wpmp_conf['patch_incoming_trackback'] = true;
トラックバック受信機能のマルチバイトパッチの有効化 (true) 、無効化 (false)$wpmp_conf['patch_incoming_pingback'] = true;
ピンバック受信機能のマルチバイトパッチの有効化 (true) 、無効化 (false)$wpmp_conf['patch_wp_trim_excerpt'] = true;
投稿抜粋の最大文字数と more 文字列設定機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_wp_trim_words'] = true;
PCRE UTF-8 がサポートされていない環境でも wp_trim_words() で文字数ベース抜粋を行えるようにする機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_get_comment_excerpt'] = true;
get_comment_excerpt() とその下流抜粋関数のマルチバイトパッチの有効化 (true) 、無効化 (false)$wpmp_conf['patch_dashboard_recent_drafts'] = true;
ダッシュボード最近の下書きウィジェット抜粋マルチバイトパッチの有効化 (true) 、無効化 (false)$wpmp_conf['patch_process_search_terms'] = true;
検索機能のマルチバイトパッチの有効化 (true) 、無効化 (false)$wpmp_conf['patch_admin_custom_css'] = true;
管理パネルのカスタム CSS 読込み機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_wplink_js'] = true;
内部リンク検索のインクリメンタルサーチを2文字で動作させる機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_character_count'] = true;
文字列カウント方式の設定を「文字数ベース」に固定する機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_twentytwelve_open_sans_off'] = true;
Twenty Twelve Google フォント無効化機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_twentythirteen_google_fonts_off'] = false;
Twenty Thirteen Google フォント無効化機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_twentyfourteen_google_fonts_off'] = false;
Twenty Fourteen Google フォント無効化機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_twentyfifteen_google_fonts_off'] = false;
Twenty Fifteen Google フォント無効化機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_twentysixteen_google_fonts_off'] = false;
Twenty Sixteen Google フォント無効化機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_force_twentyseventeen_google_fonts_off'] = false;
Twenty Seventeen Google フォント無効化機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_sanitize_file_name'] = true;
ファイル名サニタイズ機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_sanitize_feed_xml_text'] = false;
フィード XML サニタイズ機能の有効化 (true) 、無効化 (false)$wpmp_conf['patch_bp_create_excerpt'] = false;
BuddyPress bp_create_excerpt() の抜粋マルチバイトパッチの有効化 (true) 、無効化 (false)
設定ファイルに記述することで機能が有効となる項目
抜粋の最大文字数と抜粋の more 文字列をリクエストされたページタイプごとに設定することができます。それぞれ下記の書式で設定ファイルに追加してください。
$wpmp_conf['excerpt_mblength.条件分岐タグ名'] = 最大文字数;
$wpmp_conf['excerpt_more.条件分岐タグ名'] = 'more 文字列';
たとえば、検索結果ページに表示する抜粋の最大文字数を 140、サイトのフロントページに表示する抜粋の more 文字列を … にしたい場合は以下のように設定ファイルに記述します。
$wpmp_conf['excerpt_mblength.is_search'] = 140;
$wpmp_conf['excerpt_more.is_front_page'] = '...';
利用可能な条件分岐タグ名とその評価順序は次のとおりです。
is_feed
、is_404
、is_search
、is_tax
、is_front_page
、is_home
、is_attachment
、is_single
、is_page
、is_category
、is_tag
、is_author
、is_date
、is_archive
、is_paged
※ 抜粋の最大文字数は excerpt_mblength フック、抜粋の more 文字列は excerpt_more フックを利用することで、より高度なカスタマイズが可能です。
マルチサイト運用時のブログ別設定ファイル
wpmp-config-blog-{ブログID}.php
という名前の設定ファイルを /wp-content
の中に置くことで、ブログ個別にデフォルト設定および共通設定ファイルの設定を上書きすることができます。
注意事項
システム要件
PHP の mbstring 系関数を使用しています。プラグインを有効化できない場合はこれらがお使いのシステムで利用可能な状態にあるか確認してください。
コンフリクトについて
WordPress ではプラグインやテーマの組み合わせにより機能の競合が起こる場合があります。問題が起きた場合は設定ファイルで該当パッチ機能をオフにして様子をみてください。
バグを見つけたら
まず、問題の原因が本当に WP Multibyte Patch にあるのか確認してください。特に以下、不具合と判断する前によく確認してください。
- 「投稿画面でリンクの挿入ができない」 → 古いバージョンの WP Multibyte Patch を使用している場合、互換性の問題が起こることがあります。お使いの WordPress で利用可能な最新版に更新してください。また、同時に使用しているプラグインやテーマの JavaScript コードにバグがあり、そのエラーが WP Multibyte Patch の wplink.js の実行をブロックしてしまっているケースも報告されています。例: AddQuicktag の JavaScript バグ。JavaScript のコンソールにエラーが出ていないか確認してください。
- 「管理画面アイコンフォントが表示されない」 → WP Multibyte Patch を最新版にし、ブラウザのキャッシュを空にしてからリロードしてください。
確認方法
- テーマをデフォルトのものにして、すべてのプラグインを無効化する。
- WP Multibyte Patch だけ有効化する。
- この時点で問題が再現されない場合は、お使いのテーマ、あるいは、お使いの他のプラグインに原因がある可能性が考えられます。
バグの報告
該当するリリースのエントリーにコメントを残してください。
リリースの度に当プラグインの動作検証を行ってくださっている WordPress 日本語版チームの皆さんに感謝いたします。
導入させていただきました、
とても素晴らしいと思いました!
今後の予定と課題を見ただけでも大変なことと思いますが、
ぜひ頑張っていただけたら嬉しいです。
Chikadaさん、こんばんは。使って頂いてありがとうございます。
不具合、要望等ありましたらお知らせください。
ME2.2.3 をラピッドサイトでテスト中です。文字化け等もなく順調にテストをしていますが、1点だけ問題があります。問い合わせフォームからのメールがUTF-8で送信されます。WP Multibyte Patchで2.2.3用のヴァージョンはあるのでしょうか?
hiroshiさん
申し訳ありませんが現時点では本家版と日本語版の 2.3.1 ~ 2.3.3 のみの対応となっております。
MEは独自にマルチバイト化されておりますので元から動作対象としておりません。
素晴らしいプラグインありがとうございます。
ひとつ質問なのですが、プラグインを有効にしようとすると、「プラグインを使用開始しました。」と表示されるのですが、停止中のプラグインの欄に残ったままで、プラグインが有効になっていない現象があります。
wordpressバージョンは2.6です。アドバイスいただけたら幸いです。
よろしくお願いいたします。
haruさん、こんにちは。
考えられるのは PHP で mbstring 系の関数がサポートされていないという状況でしょうか。
このあたりを phpinfo() で確認してみてください。
念のためお使いの WP Multibyte Patch が 1.1 であるかも確認してみてください。
はじめまして。
「WP Multibyte Patch」にはお世話になっております。
本当に有用なプラグインの開発をありがとうございます。
さて、こちらにコメントしてよいものか悩んだのですが、日本語が絡む部分ですので、もしかしたらと一縷の望みを持って、一応報告させていただきます。
現象としましては、WP2.6 で、「作成者」権限で投稿した場合、タグ内のダブルクォーテーションに「キ」が含まれていると、その文字以降が消去された状態で保存されるというものです。
WordPress の日本語サイトのフォーラムにもトピックを立てさせていただきました。
http://ja.forums.wordpress.org/topic/771?replies=1
権限によって現象が起こりますので、このプラグインとは全く関係のないことなのかも知れませんが、ご考察いただけましたらうれしいかぎりです。
それでは、今後とも、がんばってください。
genzem さん
http://ja.forums.wordpress.org/topic/771
に対策を書いておきました。よろしくご確認ください。
早速のご回答、誠にありがとうございました。
正常に動作することを確認しました。
わざわざ、弊サイトまでお越し頂き、有難うございました。
ご指摘頂いた点、早速、修正いたしました。
文字化けしたping backは、お手数ですが、削除して頂ければ、幸いです。