確認画面付きで重宝するWordPressプラグインTrust Formのカスタマイズメモ。
カスタマイズというより具合が悪かったところの対応。
- php の Notice, Warning
- 自動返信メールの本文で[FORM DATA]一括出力ではなく個々の入力項目を指定する場合、項目名に「/」が含まれているとうまくいかない。
例)[AAA/BBB] - フォームのチェックボックスにクラス名をセットしてあるとき、このチェックボックスに何か修正するとセット済のクラス名が消えてしまう。
などを直します!
対象バージョン
- プラグインTrust Form バージョン1.8.8
- PHP5.4
カスタマイズ
文字コード
trust-form.php
カスタマイズではありませんが、ソースに日本語が入っているのでshift-jis保存しないように注意!
ソース上部で
code/*「Plugin Name: Trust Formプラグイン」*/
などと全角文字を入れておくと気づきやすいかも。
Notice対応
■ trust-form.php(951,953行目)
debug.logNotice: Array to string conversion in ...../wp-content/plugins/trust-form/trust-form.php on line 953
【変更前】//Line:951
wp_enqueue_style('trust-form-front', plugins_url( "/css/default.css", __FILE__ ), array(). '1.0', 'all' );
//Line:953
wp_enqueue_style('trust-form-front', plugins_url( "/css/default-responsive.css", __FILE__ ). array(). '1.0', 'all' );
【変更後】//Line:951(arrayの後のピリオドをカンマへ変更)
wp_enqueue_style('trust-form-front', plugins_url( "/css/default.css", __FILE__ ), array(), '1.0', 'all' );
//Line:953
wp_enqueue_style('trust-form-front', plugins_url( "/css/default-responsive.css", __FILE__ ), array(), '1.0', 'all' );
■ admin/add.php(9行目)、admin/edit.php(22行目)、admin/entries.php(26行目)
debug.logPHP Notice: screen_icon の使用はバージョン 3.8.0 から<strong>非推奨</strong>になりました。代替は用意されておりません。
PHP Notice: get_screen_icon の使用はバージョン 3.8.0 から<strong>非推奨</strong>になりました。代替は用意されておりません。
【変更前】<!--?php screen_icon( 'trust-form-logo' ); ?-->
【変更後】icon削除<!--?php /*screen_icon( 'trust-form-logo' );*/ ?-->
フォーム送信時のWARNING対応(項目名に「/」ありのケース)
debug.logWARNING: PREG_MATCH(): IN ...../WP-CONTENT/PLUGINS/TRUST-FORM/TRUST-FORM.PHP ON LINE 2165
フォーム部品項目名に半角スラッシュが含まれている場合に発生します。
自動送信メール本文で[FORM DATA]ではなく個々の項目名を指定している場合には、入力値がきちんと表示されません。
原因は、項目名を判断するための正規表現のデリミタに半角スラッシュを使用しているためです。
code'/['.$name.']/i'
※[$name]は項目名に当たる部分
ソース変更箇所は、こちら↓
■ trust-form.php(2165行目)自動返信メール本文
【変更前】Line:2165if ( preg_match('/['.$name.']/i', $body) ) {
【変更後】Line:2165//(半角スラッシュを'{'等の項目名に使用していない半角文字に変更する)
if ( preg_match('{['.$name.']}i', $body) ) {
・自動返信メール・件名⇒2173行目
・管理者宛メール・件名⇒2211行目
も同様です。
※ソース変更したくない場合には、全角スラッシュを使うのも手ですネ。
余談ですが…
以前、別のバージョンで[]にバックスラッシュを付けないとうまくいかなかったことがありました。([⇒\[、]⇒\])
フォーム部品・チェックボックスにクラス名をセットしている場合、修正する際にクラス名がなくなってしまう現象
■ /js/add-form.js(267行目~)
【変更前】//セレクトボックス、チェック、ラジオのオプション値をリアルタイムに反映
a('#setting-form').find("textarea.option-value-editor").bind('focus',function(){
var t = a(this),r = t.attr('role'),q;
if (r !== 'selectbox') {
q = setInterval(function(){
var p = t.val(), tmp = '', name=t.closest('tr').find(".setting-element-discription > ul > li > input:first").attr('name');
p = p.replace(/\r/g, '');
p = p.split(/\n/g);
for (var i=0;i<p.length;i++){ tmp="" +="
<input name="'+name+'" type="""" value="'+p[i]+'" />'+ p[i]+'</p.length;i++){>
' } t.closest('tr').find(".setting-element-discription > ul").html( tmp ); } ,200);
【変更後】(セット済みのクラス名を引き継ぐ)//セレクトボックス、チェック、ラジオのオプション値をリアルタイムに反映
a('#setting-form').find("textarea.option-value-editor").bind('focus',function(){
var t = a(this),r = t.attr('role'),q;
if (r !== 'selectbox') {
q = setInterval(function(){
var p = t.val(), tmp = '', name=t.closest('tr').find(".setting-element-discription > ul > li > input:first").attr('name');
var myclass=t.closest('tr').find(".setting-element-discription > ul > li > input:first").attr('class');//(追加)
p = p.replace(/\r/g, '');
p = p.split(/\n/g);
for (var i=0;i<p.length;i++){ tmp="" +="
<input class="'+myclass+'" name="'+name+'" type="""" value="'+p[i]+'" />'+ p[i]+''//(変更)
}
t.closest('tr').find(".setting-element-discription > ul").html( tmp );
} ,200);
</p.length;i++){>
ラジオボタンも同様なようです。
ちなみに、ソースで対応せずに、部品修正の際にクラス名を上書き保存することで回避できます!
PHP7.4 対応(追記)
PHP7.4で波かっこによる配列・文字列へのアクセスが非推奨になるための対応
debug.logDeprecated: Array and string offset access syntax with curly braces is deprecated in ...../plugins/trust-form/trust-form.php on line 426
Deprecated: Array and string offset access syntax with curly braces is deprecated in ...../plugins/trust-form/trust-form.php on line 427
trust-form 426-428行目(変更前)if ( $responce[$entry]{'status'} != $_REQUEST['entry_status'] ) {
$responce[$entry]{'status'} = $_REQUEST['entry_status'];
}
上記変更前コードの {'status'} を ['status'] へ変更する。
trust-form 426-428行目(変更前)if ( $responce[$entry]['status'] != $_REQUEST['entry_status'] ) {
$responce[$entry]['status'] = $_REQUEST['entry_status'];
}
ありがとう!