必要な知識

MW WP FORM URLのパラメータで処理や選択リストを切り替える。

いつものように意味不明なHELP。
MW WP FORM は、HELPを補助メモとして実際使ってみて、推測して・・・ってやらないといけませんねwww

で、プルダウンの選択枝を変えたいと。
リンクURLに何番のリストに切り替えるとか、
そういうことをやりたい。

MW WP FORM の選択枝や初期内を変更するためのフック

で、とりあえず、フックを仕掛けます。

基本どちらでもよさそうですが、
mwform_value_mw-wp-form-XXX は、どうもリストの変更の設定の仕方が不明です。
なのでmwform_choices_mw-wp-form-XXX でやる。

リスト形式じゃない場合は、mwform_value_mw-wp-form-XXX でやると考えると整理しやすい。

0001 //テキストフィールドなど、
0002 //ラジオボタン、チェックボックス、セレクトボックス以外の初期値を設定する。
0003 add_action( 'mwform_value_mw-wp-form-' .$numb, 'mw_wp_form_yHook' , 10, 3 );
0004

0001 //ラジオボタン、チェックボックス、セレクトボックスの初期値を設定する。
0002 add_filter( 'mwform_choices_mw-wp-form-'.$numb, 'mw_wp_form_yHook_a', 10, 3 );

XXX 部分を動的に設定


私はこんな感じでやってます。
MW_WP_Form_yHook_env に値(MW WP FORM の ID = POST ID)を入れておいて、
ぐるぐる回そうということです。

0001 $MW_WP_Form_yHook_env = get_option('MW_WP_Form_yHook_env');
0002 if( $MW_WP_Form_yHook_env !='' ){
0003  MW_WP_Form_yHook_fook( $MW_WP_Form_yHook_env );
0004 }
0005 /********************************************************/
0006 function MW_WP_Form_yHook_fook($str)
0007 /********************************************************/
0008 {
0009  //
0010  // フック
0011  //
0012  $str = str_replace("\r\n", "!cr!" , $str);
0013  $str = str_replace("\n" , "!cr!" , $str);
0014  $str = str_replace("\r" , "!cr!" , $str);
0015
0016  $numbers = explode('!cr!',$str);
0017  foreach($numbers as $numb){
0018   $numb = trim($numb," \t\n\r\0\x0B");
0019   if($numb!=''){
0020    //value値が設定可能ものに関してURL引数で渡された値をもとに動的にvalueを
0021    //設定することができる
0022    //テキストフィールドやラジオボタンの初期値を設定することが可能です
0023    add_action( 'mwform_value_mw-wp-form-' .$numb, 'mw_wp_form_yHook' , 10, 3 );
0024    add_filter( 'mwform_choices_mw-wp-form-'.$numb, 'mw_wp_form_yHook_a', 10, 3 );
0025   }
0026  }
0027 }

MW WP FORM の(mwform_value)フックに引っかかったら

mwform_value_mw-wp-form-XXX でフックした時の使い方説明します。
※URLのパラメータで処理を行うことを想定しています。

0001 /********************************************************/
0002 function mw_wp_form_yHook($value, $name)
0003 /********************************************************/
0004 {
0005  //mwform_value_mw-wp-form-でひっかかった場合
0006  //ラジオボックス、チェックボックス、セレクトボックス以外の設定
0007
0008  //セレクトボックスでも取れて、初期値の選択リストを返せる・・・みたいだけどいまいち不明。
0009  if ( $name === 'select' && !empty( $_GET['a'] ) && !is_array( $_GET['a'] ) ) {
0010   $ary = explode(/,/,$_GET['a']);
0011   return $ary;
0012  }
0013  //ラジオボックス、チェックボックス、セレクトボックス以外の設定
0014  //単純に初期値を戻すだけ。
0015  if ( $name === 'jighousho' && !empty( $_GET['b'] ) && !is_array( $_GET['b'] ) ) {
0016   return $_GET['b'];
0017  }
0018  return $value;
0019 }
$name にフィールド名が入ってきます。
$value に初期値が入ってきます。

$_GET[XX] には URLのパラメータが入ってきます。
別にURLのパラメータを使えってことはなく、開発したプログラムからもってきてるのでそういう仕様です。
普通に return で初期値を返してやればOKです。

例えば、 http ://~/?aaa=1 の場合
$_GET[‘aaa’] には 1 が入ってきます。

その値でフィールドの初期値を切り替えてあげるといった仕様のプログラムです。
上記の例では、 a , b のパラメータをそれぞれ select と jighousho の初期値として入れています。
※select など複数指定のものは、array で送り返さないといけない。

本来は、普通に↓でOKです。
0001  if ( $name === 'jighousho' ) {
0002   return 'ほげほげ';
0003  }


MW WP FORM の(mwform_choices)フックに引っかかったら

mwform_choices_mw-wp-form-XXX を説明します。
※URLのパラメータで処理を行うことを想定しています。

mwform_choices_mw-wp-form-XXX は、ラジオボックス、チェックボックス、セレクトボックスといった、
選択リストを設定するフィールドしか飛んでこないみたいです。

なので mwform_choices_mw-wp-form-XXX はラジオボックス、チェックボックス、セレクトボックス専用と思いましょうwww

0001 /********************************************************/
0002 function mw_wp_form_yHook_a( $children, $atts )
0003 /********************************************************/
0004 {
0005  mw_wp_form_yHook_tracesub("---attr---");
0006  mw_wp_form_yHook_tracesub($atts);
0007  mw_wp_form_yHook_tracesub("---children---");
0008  mw_wp_form_yHook_tracesub($children);
0009
0010  if ( $atts['name'] == 'select' ) {
0011   $pars = explode(",",mw_wp_form_getParamVal('a'));
0012   $children = $pars;
0013  }
0014  if ( $atts['name'] == 'jighousho' ) {
0015   $children = array('TEXTa');
0016  }
0017  return $children;
0018 }

ここでは、URLのパラメータを $_GET ではなく、なんとなくスマートに取り出すために
mw_wp_form_getParamVal という関数を使ってみました。

0001 /********************************************************/
0002 function mw_wp_form_getParamVal($param)
0003 /********************************************************/
0004 {
0005  //
0006  // URL から パラメータを抜き出す
0007  // $a = mw_wp_form_getParamVal('a');
0008  //
0009  $val = (isset($_GET[$param]) && $_GET[$param] != '') ? $_GET[$param] : '';
0010  $val = htmlspecialchars($val, ENT_QUOTES);
0011  return $val;
0012 }

まぁ、ソースを小さくするか速度を優先するかの違いですが、あまり大差ないと思いますw

mwform_choices_mw-wp-form-XXX は、$children と $atts を送ってきます。
$attsには、フィールド名、$children には、初期値が入ってきています。

$attsで該当するフィールド名を探り、 $children に値を入れて返せば初期値を変えることができます。
選択系のフィールドは配列にして送り返します。


汎用的なトレース用の関数

ついでにトレース用の関数です。

呼び出しは、trace(出力したいもの,ファイルモード,出力ファイル名補助)
ファイルモードは省略時 append モードで開きます。
出力ファイル名補助は、出力する場所によってファイル名を切り替えるために準備してあります。
出力先は、当該のプラグインのフォルダーになります。

mw_wp_form_yHook_a で使っていますが、文字列、変数、配列を出力することができます。
単純に文字列や変数ならば、 trace(‘a=’.$a); で a=XXXX と出しますが、
配列は、見出しを付けることができないので2行にして出力する配列の名前などを入れるといいです。

こんな感じですね。
mw_wp_form_yHook_tracesub(“—attr—“);
mw_wp_form_yHook_tracesub($atts);

この記事では、便宜上 trace としていますが、mw_wp_form_yHook_tracesub を指しています。
でも、プラグインごとに関数名を設定しないとバッティングしますので注意してください。

汎用追跡用関数

0001 function mw_wp_form_yHook_tracesub( $mess , $sw='a' , $apname='') {
0002  
0003  //return;
0004  
0005  if($apname !=''){
0006   $apname = '_'.$apname;
0007  }
0008  $plugin_myfile = plugin_dir_path(__FILE__).'snapshot'.$apname.'.txt';
0009  
0010  $ofp = fopen($plugin_myfile,$sw);
0011  if(is_array($mess)){
0012   fwrite($ofp,print_r($mess,true));
0013  }else{
0014   fwrite($ofp,$mess."\n");
0015  }
0016  fclose($ofp);
0017 }
スポンサードリンク

関連記事一覧