前提・実現したいこと
phpもWordPressも初心者です。
とても長くなり申し訳ないのですが、
WordPressでオプションページを作り、それぞれ設定された値で表示を変えたい(条件分岐)です。
WORDPRESS SETTINGS / OPTIONS PAGE GENERATOR
https://www.wp-hasty.com/tools/wordpress-settings-options-page-generator/
上記のジェネレーターを利用し、右側にできたコードをそのままコピペしたのですが
array_search() expects parameter 2 to be array, boolean given in~
というエラーがチェックボックス・ラジオボタン・セレクトボックスの所に表示され、
これについて調べたら2番目の引数の前に(array)を追加すれば解決するということだったので、以下の2ヶ所を、
php
1selected($value[array_search($key, $value, true)], $key, false), 2 3checked($value[array_search($key, $value, true)], $key, false),
↓このように修正したところエラーは消えました。
php
1selected($value[array_search($key, (array)$value, true)], $key, false), 2 3checked($value[array_search($key, (array)$value, true)], $key, false),
また、作成したオプショーンページのソースを見たら、HTMLは以下のようになっていました。
HTML
1<form method="POST" action="options.php"> 2 <input type='hidden' name='option_page' value='test' /> 3 <input type="hidden" name="action" value="update" /> 4 <input type="hidden" id="_wpnonce" name="_wpnonce" value="何か数字が書いてある" /> 5 <input type="hidden" name="_wp_http_referer" value="/xxx/wp-admin/admin.php?page=test" /> 6 <table class="form-table"> 7 <tr><th scope="row">テキスト</th><td><input name="test1" id="test1" type="text" value="" /></td></tr> 8 <tr><th scope="row">セレクト</th><td><select name="test2[]" id="test2" ><option value="セレクト1" >セレクト1</option><option value="セレクト2" selected='selected'>セレクト2</option></select></td></tr> 9 <tr><th scope="row">背景色</th><td><input name="test3" id="test3" type="color" value="" /></td></tr> 10 <tr><th scope="row">画像</th><td><input style="width: 40%" id="test4" name="test4" type="text" value=""> <input style="width: 19%" class="button test-media" id="test4_button" name="test4_button" type="button" value="Upload" /></td></tr> 11 <tr><th scope="row">チェック</th><td><fieldset><label for="test5_1"><input id="test5_1" name="test5[]" type="checkbox" value="チェック" checked='checked' /> チェック</label><br/></fieldset></td></tr> 12 <tr><th scope="row">ラジオ</th><td><fieldset><label for="test6_1"><input id="test6_1" name="test6[]" type="radio" value="ラジオ1" checked='checked' /> ラジオ1</label><br/><label for="test6_2"><input id="test6_2" name="test6[]" type="radio" value="ラジオ2" /> ラジオ2</label><br/><label for="test6_3"><input id="test6_3" name="test6[]" type="radio" value="ラジオ3" /> ラジオ3</label><br/></fieldset></td></tr> 13 </table> 14 <p class="submit"><input type="submit" name="submit" id="submit" class="button button-primary" value="変更を保存" /></p> 15</form>
試したこと
テキストフィールド、メディア、カラーは
php
1$test1 = get_option('test1'); 2if ( !empty ($test1) ) { 3 echo get_option('test1'); 4} else { 5 echo '何も入力されていません'; 6}
としたら(書き方が合っているかは分からないですが)一応できました。
分からないところは、チェックボックス、ラジオボタン、セレクトボックスの3つで、
php
1echo get_option('test2'); //←セレクト 2echo get_option('test5'); //←チェック 3echo get_option('test6'); //←ラジオ
とすると3つとも「Array」と表示されてしまいます。
「wp-admin/options.php」を見ても、この3つのフィールドは「SERIALIZED DATA」となっています。
これは最初のエラーの直し方が間違っているからなのでしょうか?
また、条件分岐の書き方を調べはしたのですが、たとえばラジオボタンだと全ての選択肢のnameが「test6[]」となっているので、どのように書いたら良いのかさっぱりです...。
チェックボックスにチェックが入っているかどうかは↓のように書きましたが、チェックが入っていても入っていなくても「チェックされていない」となってしまいます。
php
1if(isset($_POST['test5'])){ 2 echo 'チェックされている'; 3}else{ 4 echo 'チェックされていない'; 5}
最初のエラーの直し方や、チェックボックスなどの取得方法が間違っているのであれば、正しい直し方を知りたいです。
よろしくおねがいいたします。