お世話になっております。
WordPressでオリジナルサイトオプション設定画面を作成しており、データがうまく保存されず、どこが悪いのかわからずこちらに投稿させていただいております・・。
実装したい機能は主に2つです。
①テキストボックスがあり、値を入力して保存する
②ボタンをクリックするとテキストボックスが増えて、そのテキストボックスに入力した値も保存する
→この仕様のため、add_optionなどに指定するオプション名をimagesliders[]といった、配列の形にしたのですがこれがそもそもおかしいでしょうか・・?調べてこのようにしたのですが、理解が誤っているようでしたらご指摘いただけると幸いです。
まずは1つのテキストボックスに値を入力したのですが、画面をリロードすると値が保存されていません。
($_POST['imagesliders']を連想配列のキー名を指定して表示、などとしている部分には、リロード前には値が入っています)
データベースには
a:1:{i:0;a:2:{s:9:"image_url";s:0:"";s:10:"target_url";s:0:"";}}
と入力されていたので、add_optionが実行された結果なのか?と思っているようですが、中身が入っていないようです・・。
functions.php
php
1//////////////////////////////////////////////////// 2//画像スライダーメニュー 3////////////////////////////////////////////////// 4<?php 5// admin_menu でメニューに追加 6add_action('admin_menu', 'register_imageslider_menu_page'); 7function register_imageslider_menu_page() 8{ 9 add_menu_page( 10 '画像スライダーページタイトル', '画像スライダー', 'manage_options', 'site_settings', 'create_custom_menu_page', 'dashicons-images-alt', 6 11 ); 12} 13 14// カスタムメニューページを読み込むfunction 15function create_custom_menu_page() { 16 require TEMPLATEPATH.'/admin/site_settings.php'; //テンプレートのパス 17} 18 19 20//site_setting.phpから呼ばれる 21function generate_upload_image_tag($name, $value){ 22 23if(!isset($_POST['imagesliders'])){ ?> 24 25 選択されていません。<br/> 26<div class="form-block" id="form_block[0]"> 27 <input class="clonetarget" type="text" name="<?php echo $name; ?>" id="name[0]" value="" /> 28</div> 29<p> 30</p> 31 32<?php }else{ ?> 33 34 <strong>$_POST['imagesliders']をforeach構文で表示</strong><br/> 35 <?php foreach($_POST['imagesliders'] as $value){ ?> 36 <?php echo "$value<br/>\n"; 37 echo("<br>image_url: ".$value ); 38 $add_html = '<div class="form-block" id="form_block[0]"> 39 <input class="clonetarget" type="text" name="'.$name.'" id="name[0]" value="'.$value.'" /> 40</div> 41<p> 42</p>'; 43 44echo $add_html; 45 } ?> 46 47 <br/> 48 49 <strong>$_POST['imagesliders']を連想配列のキー名を指定して表示</strong><br/> 50 <?php $max = count($_POST['imagesliders']); ?> 51 <?php for($i=0; $i<$max; $i++){ ?> 52 <?php echo "{$_POST['imagesliders'][$i]}<br/>\n";?> 53 <?php } ?> 54 55 <br/> 56 57 <strong>$_POST['imagesliders']の構造を確認</strong><br/> 58 <pre> 59 <?php var_dump($_POST['imagesliders']); ?> 60 </pre> 61 62<?php } 63 64}?> 65 66 67
site_setting.php
<?php $arr = array( ['image_url' => '','target_url' => ''], ); add_option('imagesliders[]',$arr); // update_option if ($_REQUEST['imagesliders[]']) { echo("var_dump:"); var_dump($_REQUEST['imagesliders[]']); update_option('imagesliders[]', $_REQUEST['imagesliders[]']); } ?> <div class="wrap"> <h2>画像スライダー設定画面</h2> <button id="add_image_button">画像を追加する</button> <br> <form method="post" action="admin.php?page=site_settings"> <p>スライダーに使用する画像をメディアライブラリから選択してください</p> <?php generate_upload_image_tag('imagesliders[]', get_option('imagesliders[]')); //WordPressメディアアップロード機能 ?> <?php submit_button(); //保存ボタン ?> </form> </div>
回答4件
あなたの回答
tips
プレビュー