本家版日本語版 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) から各パッチ機能を個別に有効化・無効化できます。


インストール

通常インストール

  1. ZIP を解凍し、wp-multibyte-patch フォルダを /wp-content/plugins の中に入れてください。
  2. 管理パネルのプラグインページで 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 フォルダの中身を新しいファイルで上書きしてください。

アンインストール

  1. 管理パネルのプラグインページで WP Multibyte Patch を停止してください。
  2. wp-multibyte-patch フォルダ、wpmp-config.php を削除してください。データベースへの設定値の保存、ファイル生成等は行っておりません。

設定ファイル

デフォルトで標準的な設定値が割り当てられるようになっています。これらの設定値を変更する必要がある場合は、wpmp-config-sample-ja.phpwpmp-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_feedis_404is_searchis_taxis_front_pageis_homeis_attachmentis_singleis_pageis_categoryis_tagis_authoris_dateis_archiveis_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 を最新版にし、ブラウザのキャッシュを空にしてからリロードしてください。

確認方法

  1. テーマをデフォルトのものにして、すべてのプラグインを無効化する。
  2. WP Multibyte Patch だけ有効化する。
  3. この時点で問題が再現されない場合は、お使いのテーマ、あるいは、お使いの他のプラグインに原因がある可能性が考えられます。

バグの報告

該当するリリースのエントリーにコメントを残してください。


リリースの度に当プラグインの動作検証を行ってくださっている WordPress 日本語版チームの皆さんに感謝いたします。

51 thoughts on “WP Multibyte Patch

  1. vanjac さん
    こちらでも想定外の問題が起り得ることを知ることができました。
    今後の仕様の参考とさせて頂きます。

  2. I use svn to update several sites running WP 2.7.x and I would like to use it to keep the multibyte plugin updated on my Japanese sites.

    However the version at http://svn.automattic.com/wordpress-i18n/ja/trunk/dist/wp-content/plugins/wp-multibyte-patch/ is behind the version on this site. Why don’t you use the official wordpress.org plugin cvs repository? Do you have any other svn server I should use instead?

    Thanks for your work!
    -Ray Mercer
    Yokosuka, Japan

  3. すばらしい、プラグインをありがとうございます。

    wpmp-config.phpでの設定をWPの管理画面「設定」から行えるようになるとうれしいです。

  4. WP Multibyte Patchは活用させていただいています。
    質問なのですが、フィルタフック『excerpt_length』には対応していないのでしょうか?
    表示するページによって、概略の長さを変更したいのですが、どうしても変更できず、再度wp_trim_excerpt関数をかけて対処しています。
    何かいい方法があれば教えてください。

  5. 近藤@あすまるさん

    WP Multibyte Patch 内部の wp_trim_excerpt() 関数には、excerpt_length フックはありません。ページごとに下記変数の値を変えれば望まれるような出力が得られるかと思いますがいかがでしょうか。

    $wpmp->conf[‘excerpt_mblength’] = 日本語本文の場合の文字数;

  6. [admin.cssについて]
    いつも利用させていただいております。
    force_admin_ssl(true)を設定し、管理画面にSSLを適用して運用した場合、multibyte-patchのadmin.cssはhttpで取得されるため、「暗号化されていないページがあります」等のブラウザ警告がでます。
    ./ext/ja/class.phpのadmin_custom_css(), word_count_js() に以下のようなコードを追加して解消しました。
    if(force_ssl_admin()) {
    $url = str_replace(“http://”, “https://”, $url);
    }
    大した問題ではないのですが、一応ご報告致します。

Leave a Reply

Your email address will not be published. Required fields are marked *