質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

1452閲覧

WordPressのオリジナルメニューでサイトオプション情報が保存されない

ringoringogogo

総合スコア15

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/06/30 03:37

お世話になっております。

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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/06/30 22:15

> var_dump($_REQUEST['imagesliders[]']); の部分で、何が出力されますか?
ringoringogogo

2021/07/01 00:18

ご指摘ありがとうございます。 Undefined index: imagesliders[] in admin/site_settings.php on line 12 となってしまっており、変数の中に値が中に入っていないようです。そもそもうまくPOSTできていないということになるでしょうか・・?
guest

回答4

0

自己解決

$_REQUEST['imagesliders[]']を$_REQUEST['imagesliders']とすることで解決しました!ご回答いただいたみなさま、ありがとうございました。

投稿2021/07/02 04:26

ringoringogogo

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

問題はそこじゃなかったですか。申し訳ありません。

値をセットして試されたのですね?

データベースの中身は確認されましたか?var_dump($_REQUEST['imagesliders[]']);ここで確認されたのですね?

エラーは出ていないのですか?配列変数を書き換えてみてはどうでしょう?
私はこういう書き方をしたことがないのでわかりませんが・・・

ワードプレスのオプションは自動でシリアライズしてくれると思います。

しっかり機能していると思っていたのですが・・・・
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
データベースには
a:1:{i:0;a:2:{s:9:"image_url";s:0:"";s:10:"target_url";s:0:"";}}
と入力されていたので、add_optionが実行された結果なのか?と思っているようですが、中身が入っていないようです・・。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

$arr = array(
['image_url' => '','target_url' => ''],
);
add_option('imagesliders[]',$arr);

ーーーーーーーーーーーーーーーーーーーーーーーーーー

$arr = array(
['image_url' => '','target_url' => ''],
);
add_option('imagesliders',$arr);

投稿2021/06/30 14:56

arumakanda

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ringoringogogo

2021/07/01 15:00

とんでもありません、ご回答ありがとうございます。 データベースには空の値が定義されている状態でした。 var_dump($_REQUEST['imagesliders[]']);の結果は Undefined index: imagesliders[] in admin/site_settings.php on line 12 となってしまっており、変数の中に値が中に入っていないようです。そもそもうまくPOSTできていないということになると思うのですが正しいPOSTの方法がわからない状態です・・。
guest

0

私の文字がひらがなになっていたからわかりにくかったかも知れませんね。

['image_url' => '','target_url' => '']個々の部分が空ですよ。

['image_url' => '〇〇','target_url' => '△△']

〇や△のところが空になっているから呼び出しても何も表示されないのではありませんか?

参考になさったサイトではしっかり値が入っていましたよ。

投稿2021/06/30 13:12

arumakanda

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ringoringogogo

2021/06/30 13:33

再度コメントいただき、ありがとうございます。 最初にいただいたコメントを読み、その通りだと思ってご指摘の部分をコメントアウトしたり、'image_url'に$_REQUESTの変数を入れてみたのですがだめでした・・・。 参考にしたサイトでは確かに値が入っているのですが、配列で保持している例ではないため、配列でサイトオプションのデータを保持する方法がわからずない状況です・・・
guest

0

site_setting.phpの中の $arrにからの値しかセットされていないようです。

$arr = array(
['image_url' => '','target_url' => ''],
);
add_option('imagesliders[]',$arr);

投稿2021/06/30 07:28

arumakanda

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ringoringogogo

2021/06/30 08:08

ご回答いただきましてありがとうございます。 一旦、以下のようにしてみましたが同じ動作となってしまいました・・ (こちらのページを参考にしました  https://100webdesign.jp/services/wordpress/wp_result/wp_result-654/ ) // $arr = array( // ['image_url' => '','target_url' => ''], // ); add_option('imagesliders[]'); 保存する部分で何か処理が必要なのでしょうか・・。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問