web-dev-qa-db-ja.com

Get_option配列の内容が表示されないのはなぜですか?

私はこれに対する答えを探して数え切れないほどの投稿をしてきましたが、ほぼすべての組み合わせを試しました。とても明らかに、私はそれがWordpressのコミュニティにとっておそらく不可能であるように小さいステップを逃しています。

私のコードはオプションをデータベースに書き込みますが、それらを表示することができません。配列が設定されていません。複数のオプションを追加および削除できます。

データを書き込みます。

<?php
     $mycontents = array('content' => $_POST['cont'], 'content2' => $_POST['cont2']);
     update_option('slider_contents',$mycontents);
?>

データベースエントリはここにあります:

a:2:{s:7:"content";a:3:{i:0;s:19:"This is content 1-a";i:1;s:19:"This is content 2-a";i:2;s:19:"This is content 3-a";}s:8:"content2";a:3:{i:0;s:19:"This is content 1-b";i:1;s:19:"This is content 2-b";i:2;s:19:"This is content 3-b";}}

データを読み取って表示しようとしています。

<?php
    $the_contents=get_option('slider_contents');
    foreach ($the_contents as $content) {
         $content1=stripslashes($content->content);
         $content2=stripslashes($content->content2);
?>
<li><textarea name="cont[]" rows="3" style="width:70%;" ><?php echo $content1; ?></textarea><br><textarea name="cont2[]" rows="3" style="width:70%;" ><?php echo $content2; ?></textarea><br><input type="button" value="Delete this option" onClick="delete_field(this);"  /><input type="button" value="Add new option" onClick="add_to_field(this);"  /></li>

        <?php } ?>

私も試してみました...

<?php
    $the_contents=get_option('slider_contents');
    foreach ($the_contents as $content) {
         $content1=stripslashes($content['content']);
         $content2=stripslashes($content['content2']);
?>

var_dump($the_contents);の出力は次のとおりです。

array(2) { 
  ["content"]=> array(3) { 
    [0]=> string(19) "This is content 1-a" 
    [1]=> string(19) "This is content 2-a" 
    [2]=> string(19) "This is content 3-a" 
  } 
  ["content2"]=> array(3) { 
    [0]=> string(19) "This is content 1-b" 
    [1]=> string(19) "This is content 2-b" 
    [2]=> string(19) "This is content 3-b" 
  } 
}
3
Jim S.

あなたのコードを見てみましょう。最初のコードブロックは配列をオブジェクトのように扱っているので、2回目の試行はより正確になります。

$the_contents=get_option('slider_contents');
// var_dump($the_content);
foreach ($the_contents as $content) {
     $content1=stripslashes($content['content']);
     $content2=stripslashes($content['content2']);

私が提案したことを行い、そのコードブロック内のvar_dumpを配置したとすると、次のようになります。foreach ($the_contents as $content) {を使用すると、配列をループできます。繰り返しのたびに、$contentはそれ自体が次のような配列になります。

array(3) { 
    [0]=> string(19) "This is content 1-a" 
    [1]=> string(19) "This is content 2-a" 
    [2]=> string(19) "This is content 3-a" 
}

$content['content']にアクセスしようとすると、存在しないキーにアクセスしようとしています - すでに "過去"をループしています。次のコマンドを実行して、自分でこれを実演できます。

$the_contents = unserialize('a:2:{s:7:"content";a:3:{i:0;s:19:"This is content 1-a";i:1;s:19:"This is content 2-a";i:2;s:19:"This is content 3-a";}s:8:"content2";a:3:{i:0;s:19:"This is content 1-b";i:1;s:19:"This is content 2-b";i:2;s:19:"This is content 3-b";}}');
foreach ($the_contents as $content) {
  var_dump($content); 
}

あなたがする必要があるのはその$contents配列をループして各部分を個別に取ることです。

foreach ($the_contents as $content) { // this part you already have
  foreach ($content as $c) {
    echo stripslashes($c);
    // you are building a string, of course, but that is the idea
  }
}
1
s_ha_dum