web-dev-qa-db-fra.com

Pourquoi le contenu du tableau get_option ne s'affiche-t-il pas?

Je suis allé à d'innombrables postes à la recherche de la réponse et j'ai essayé presque toutes les combinaisons. Alors évidemment, il me manque une étape si petite que c'est probablement insondable pour la communauté Wordpress.

Mon code écrit les options dans la base de données, mais ne les affiche pas. Le tableau n'est pas défini. Plusieurs options peuvent être ajoutées et supprimées.

Ecrit les données:

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

Voici les entrées de la base de données:

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";}}

Essayer de lire et d’afficher les données:

<?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 } ?>

J'ai aussi essayé ...

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

La sortie de var_dump($the_contents); est:

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.

Regardons votre code. Votre premier bloc de code traite un tableau comme un objet afin que votre deuxième tentative soit plus proche de la précision:

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

En supposant que vous ayez fait ce que j’avais suggéré et placé le var_dump où j’ai dans ce bloc de code, il se passe ce qui suit: foreach ($the_contents as $content) { vous permet de parcourir le tableau en boucle. À chaque itération, $content est lui-même un tableau qui ressemble à:

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" 
}

Ainsi, lorsque vous essayez d'accéder à $content['content'], vous essayez d'accéder à une clé qui n'existe pas. Vous avez déjà bouclé cette boucle. Vous pouvez le démontrer vous-même en exécutant:

$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); 
}

Ce que vous devez faire, c'est boucler sur ce tableau $contents et prendre chaque élément individuellement.

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