先日、「WordPressのカスタムフィールドを便利に使うプラグイン - Custom Field GUI」という記事に以下のようなコメントをいただきました。 IE7で使用しているところ、一度投稿した記事を投稿の管理から再編集するときに、カスタムフィールドに追加してあるチェックボックスが最初の投稿時にチェックしていても、チェックが外れて表示されてしまいます。 Firefoxでは、チェックボックスの...
先日、「WordPressのカスタムフィールドを便利に使うプラグイン - Custom Field GUI」という記事に以下のようなコメントをいただきました。
IE7で使用しているところ、一度投稿した記事を投稿の管理から再編集するときに、カスタムフィールドに追加してあるチェックボックスが最初の投稿時にチェックしていても、チェックが外れて表示されてしまいます。
Firefoxでは、チェックボックスのチェックが維持されてまま表示されます。
IE7でもチェックが維持できる方法があるでしょうか?
よろしくお願い致します。
この件については自分も少し気になっていたのですが、この不具合については、オリジナルの Custom Field GUI からある不具合だったのでなんとなく放置していましたが、いただいたコメントを機に原因を調べました。
コメントいただいた まさ さん、ありがとうございます。
本家 Custom Field GUI でも、当サイトで公開しているカスタマイズ版の Custom Field GUI Utility でも、IE でチェックボックスのチェックが外れてしまうのは、おそらく以下の箇所が原因だと思われます。
本家プラグインの「rc-custom-field-gui.class.php」ファイルの約 57、58 行目
$out .=
'<input class="checkbox" name="' . $name . '" value="true" id="' . $name . '" "' . $checked . '" type="checkbox" />';
上記赤字部分の両端の「 " 」が問題です。
変数 $checked は、すでにチェックが入っているものについてのみ「 checked="checked" 」が入るようになっています。その変数 $checked を「 " 」で囲ってしまうと、チェックが入っているものについては「 "checked="checked"" 」となってしまい、ブラウザによってはその属性が正しく解釈できないためにチェックが外れてしまうようです。
これは、ラジオボタンなどについても同様なようです。
テキストエディタで「 rc-custom-field-gui.class.php 」を開き、不要な「 " 」を削除します。ただ、削除するだけだと「 checked="checked" 」が他の属性とくっついてしまうので、「 checked="checked" 」を変数 $checked に代入するところで、頭に半角スペースを入れておきます。
具体的には以下のようになります。
[44行目]
$checked = $checked ? ' checked="checked"' : '';
[48行目]
$checked = ' checked="checked"';
[58行目]
'<input class="checkbox" name="' . $name . '" value="true" id="' . $name . '"' . $checked . ' type="checkbox" />';
[85行目]
$checked = ( trim( $val ) == trim( $selected ) ) ? ' checked="checked"' : '';
[88行目]
'<label for="' . $id . '" class="selectit"><input id="' . $id . '" name="' . $name . '" value="' . $val . '"' . $checked . ' type="radio"> ' . $val . '</label><br>';
[115行目]
$checked = ( trim( $val ) == trim( $selected ) ) ? ' selected="selected"' : '';
[118行目]
'<option value="' . $val . '"' . $checked . '> ' . $val. '</option>';
修正したファイルを置いておきます。
以下のページから最新版の rc-custom-field-gui-utility-031.zip をダウンロードして、「 .class.php 」で終わるファイル名の php ファイルで既存のファイルを上書きしてください。
以上です。