WordPress: Google AdSense のプラグイン
Jun 30

WordPress: クォート文字の強制置換を無効にする

WordPress はシングルクォート(') やダブルクォート(") を強制的に , に置換して表示してしまう。このおせっかいな処理を無効にするために WordPress のシステムを調べてみた。

は ” という番号文字参照に置換されているのでこれが記述されているスクリプトを検索すると、"wp-includes/formatting.php" というファイルが見つかる。このファイルに記述されている function wptexturize() という関数で置換されていることがわかった。
次に wptexturize() をコールしているスクリプトを探したところ、"wp-includes/default-filters.php" というファイルが見つかった。内容を見ると、

add_filter('category_description', 'wptexturize');

などという記述がいくつもあるので、add_filter() について http://wordpress.org/ のドキュメントを読んだところ、remove_filter() という関数で無効にできるとのことだ。Plugin API のページに書かれているので pluginsフォルダに以下の内容を書いた PHPスクリプトを作成して有効にしてみた。
function wptexturize() ではクォート文字以外にもいろいろな文字を置換しているので無効にしたいところだけ無効になるようにした。

wp-content/plugins/MJ-remove-filter.php

PHP:
  1. <?php
  2. /*
  3. Plugin Name: MJ Remove Filter
  4. Plugin URI: None
  5. Description: This plugin removes every added filter which you want to disable. You can see added filters in 'wp-includes/default-filters.php'.
  6. Author: MJ
  7. Author URI: http://www.mediajungle.com/
  8. */
  9.  
  10. remove_filter('category_description', 'wptexturize');
  11. remove_filter('list_cats', 'wptexturize');
  12. remove_filter('single_post_title', 'wptexturize');
  13. remove_filter('the_title', 'wptexturize');
  14. remove_filter('the_content', 'wptexturize');
  15. remove_filter('the_excerpt', 'wptexturize');
  16. remove_filter('bloginfo', 'wptexturize');
  17. ?>

上記内容を pluginsフォルダに保存して、プラグインを有効にすればクォート文字は置換されなくなる。
なお、このサイトでは「iG:Syntax Hiliter」というプラグインを利用しており(上記PHPコードの部分で使われている)、こっちでも悪さをするのでこちらは直接プラグインを書き替えている。

Leave a Reply