本家版日本語版 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. WP Multibyte Patchを有効化すると、
    テーマGrapheneのトップページに表示されるスライダー中の文章に改行をさせることが出来ません。

    Grapheneを適用すると 外観 に現れる Grapheneのオプション で
    Display タブを選び Excerpts Display Options にて
    Retain these HTML tags in excerpts の欄に “<br>” を指定しても、
    改行されません。

    WP Multibyte Patchを無効にしたら改行されます。
    事象発生環境 http://kotogaki.com/

    1. WP Multibyte Patch の抜粋関数と graphene_improved_excerpt() という関数は機能実現のためにまったく同じ手法で本体の抜粋関数を上書きしています。完全なる競合なのでどちらかのバグということではありません。抜粋内の HTML タグを保持する簡単な方法としては投稿編集画面の抜粋欄への手入力が考えられます。抜粋欄の内容は入力した通りに出力されるはずです。

  2. 1.6にバージョンアップしたからか分からないのですが、文が抜粋されなくなりました。何かいい方法はあるでしょうか?

  3. 失礼致します。
    バージョン 1.6.2 にアップした所、descriptionが表示されない、又は極端に短く表示される等の不具合が出ているようです。
    WP Multibyte Patchを停止したら元通りになったので間違いないと思われます。
    対策の方をよろしくお願い致します。

    1. WP Multibyte Patch 以外のすべてのプラグインを停止し、テーマをデフォルトの Twenty Eleven に戻して試してみましたでしょうか?

      現在他に同様な現象の報告はありませんし、私の環境では再現されませんので「1.6.1では問題がなかった」等可能な限り詳しく情報を書いてくださると助かります。利用中のプラグインやテーマ、また、フィルターや関数を用いて独自に抜粋出力をカスタマイズされているのであれば具体的になにをしているのか書いてください。「表示されない、又は極端に短く」なっている状態をお見せいただくことはできますか?

    1. Hi, I am using your plugin for my multilingual wordpress site with english and japanese.

      The ascii excerpt_length has stopped working in 1.6. It was working ok in v1.5.

  4. 一応発見したのでコメントします。
    wp-multibyte-patch は GYS Themed Categories
    というプラグインと相性が悪いみたいです。最初はphp-mbstringがインストールされてないせいかと思ったのですが、自分の環境では問題なくGYS Themed Categories プラグインをインストールした場合、505エラーになるようです。
    どちらかを消すときちんと表示されました。

    wp-multibyte-patch に問題があるというわけではないですが、一応発見しましたのでご報告だけしておきます。

    1. 私の環境では、おっしゃっている問題は再現されません。しかしながら GYS Themed Categories 自体、単体で非推奨関数や未定義変数のエラーを多く出力していますので何らかのバグを持っていることは考えられます。WP Multibyte Patch は恐らく関係ないと思われますが、何かありました時はまたよろしくお願いいたします。

      1. 初めまして。
        GYS Themed Categoriesで同じ現象が出ました。

        ・WP3.5.1–ja
        ・PHP5.4
        ・WP Multibyte Patch 1.6.4
        ・プラグインは、WP Multibyte Patchと該当のもの以外すべて停止

        私の環境では、url_to_postidという関数でエラーになっているようです。

        そこで、以下のようなプラグインを作成して、再現してみたところ、やはりエラーになります。

        Fatal error: Call to a member function wp_rewrite_rules() on a non-object in /wp-includes/rewrite.php on line 294

        ■作成したプラグイン

        function my_template($template) {
        $url = ‘http://’.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];
        $pid=url_to_postid($url);

        return $template;
        }

        add_filter(‘template’,’my_template’);

        ■現象
        ・サイドバーで「url_to_postid」を実行しても問題なく実行される。

        ・上記のプラグインのようなタイミングで、url_to_postidが呼び出されるとエラーになる

        ・WP Multibyte Patchを停止すると、どちらもエラーにならない


        WP Multibyte Patchとは関係なさそうにも思えるのですが、もし何か助言いただけるとありがたいです。

        1. おっしゃるとおり呼び出しタイミングによる問題です。1.6.4 版のものをこちらの wp-multibyte-patch.php と置き換えてみてください。

          詳しくはこちらを読めばわかると思いますが GYS Themed Categories は今後も他のプラグインやテーマと問題を起こす可能性があります。多くのエラーを吐きながら作者がその直し方をわからず逆に質問しているという状況で、それらのバグはそのまま放置されているようです。このような信頼できないプラグインは可能な限り利用するべきではありません。他のプラグインのバグにこちらで対応するのは筋ではありませんので、今後 GYS Themed Categories に関する対応は特別な理由がない限り行いませんので、作者へ直接依頼してください。

  5. はじめまして、堤と申します。

    以前「WP Multibyte Patch1.6.1」のプラグインを使ってる時は、
    管理画面はメイリオ表示だったんですけど、
    新たに、ワードプレス開設して、
    次は、「WP Multibyte Patch1.6.4」であったため、
    管理画面はメイリオ表示でなかったのですので、
    多少管理画面が見にくくなりました。

    管理画面をメイリオ表示するには、
    どこをどのように編集すると、
    メイリオ表示できますでしょうか?

    ご回答宜しくお願い致します。

  6. こんばんは、堤です。

    ご回答頂きありがとうございました!

    「WP Custom Admin CSS」というプラグインをアップロードして、
    有効化したら、一発でメイリオ表示できました!

    どうも親切に教えて頂きありがとうございました^^

    1. そちらのプラグインは、古い WP Multibyte Patch のコードを元にして書かれているようです。customize.php など完全に対応させるには、$wpmp_conf['admin_custom_css_url'] にて独自 CSS ファイルを指定する方法が確実です。

  7. 初めまして!WPの日本語化を最近行い、
    御Patchを大変ありがたく利用していたのですが、
    困ったことに気づきましたので、ご報告します。

    当Patchを利用した状態だと以下の現象が発生します。
    投稿画面のエディタ部で、「リンクの追加/編集」ダイアログが機能しなくなります。
    具体的には、ダイアログまで表示されるものの、
     URL・・・デフォルトセットされていた ”http://” がセットされなくなる
     「または既存のコンテンツにリンク」・・・クリックしても機能しない
     キャンセル・・・押下できない
     リンク追加・・・押下するとページ遷移が発生し、
               「ナビゲーションの確認ダイアログ」(chromeの場合)が出現。
              →OKを押すとエディタが閉じ前の画面へ戻ってしまう。

    この現象は、IEでも確認しております。
    当Patchを外すと、動作は正常に戻ることも確認いたしました。

    小生の環境に依存する問題かとも思いますが、一度ご確認頂けないでしょうか?
     

    1. すいません、自己解決しましたので、報告いたします。
      結論から言うと、AddQuicktagが悪さをしていたようで、AddQuicktagだけを無効化すると
      正常動作することを確認しました。

      AddQuicktagは、インストールだけしたものの
      、一度も使ったことがないため、設定はオールブランクだったのですが、
      こちらに、適当な設定を加えたところ、
      双方有効化しても「リンクのダイアログ」に関しては正常動作することを確認しました。

      エディタの表示部分に手を加える部分で何らかの干渉があったのかと想像します。

      なお、AddQuicktag側で中途半端(Post等にチェックを入れない等)な設定を施すと、
      エディタ上に不思議な挙動がすることも確認しましたが、
      これは、Multibyte Patchを無効化すると防げるようです。

      以上

      追伸
      Postするところを誤っていたかもしれません、ご容赦ください。

      1. これは AddQuicktag の JavaScript のバグのようです。エラーがでておりますし、WP Multibyte Patch の有無に関わらずテキストモードのエディタのボタンが消えてしまいます。同時有効時にリンク挿入が機能しなくなる理由は恐らくスクリプトの読込み順序の関係で WP Multibyte Patch の機能が AddQuicktag のバグの影響を受けてしまうためだと思います。気になるようであれば、wpmp-config.php で $wpmp_conf['patch_wplink_js'] = false;と設定してください。

        1. ご確認頂きありがとうごあいました。
          なるほど、そういうことだったのですね。

          当方は、前述のようにAddQuickTagの方へ一定の設定を加えることで回避し、このまま運用をしようと思っております。

Leave a Reply

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