J'ai nav_menu_options
dans ma base de données Wordpress comme ci-dessous.
284,'nav_menu_options','a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}'
J'ai essayé de désérialiser cette valeur, mais le résultat est une chaîne vide - je mets un extrait de code dans <my theme>/function.php
comme ci-dessous
echo 'TRY #1'.'<br>';
$v = 'a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}';
$d = unserialize($v);
print_r($d);
echo 'TRY #1 end'.'<br>';
echo 'TRY #2'.'<br>';
$v ='a:5:{s:9:"engine_id";a:1:{i:0;s:9:"300000225";}s:15:"transmission_id";a:1:{i:0;s:6:"257691";}s:5:"plant";a:1:{i:0;s:23:"Oshawa, Ontario, Canada";}s:15:"Manufactured in";a:1:{i:0;s:6:"CANADA";}s:22:"Production Seq. Number";a:1:{i:0;s:6:"151411";}}';
$d = unserialize($v);
print_r($d);
echo 'TRY #2 end'.'<br>';
Le résultat du code ci-dessus est comme ci-dessous.
@ 1 la valeur de Worpdress désérialisée est vide.
@ 2 Un exemple de valeur sérialisée valide résulte en un tableau lisible.
Donc, ma question est Pourquoi ne pouvons-nous pas désérialiser les valeurs sérialisées de Wordpress? - Ceci est également posté sur wordpress.org ici .
p.s.
1) Une étude plus approfondie du code Wordpress montre que nous pouvons "décoder" la valeur discutée en utilisant la commande get_option('nav_menu_options');
.
2) La valeur de nav_menu_options
correspond aux données réelles copiées à partir de la base de données.
Votre problème est que les chaînes sérialisées contiennent des barres d'échappement qui ne sont pas évaluées en tant que telles, car wrapping quote est un guillemet simple.
Vous utilisez:
$v = 'a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}'; // wrong
Vous devez utiliser soit
$v = "a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}"; // ok
ou
$v = 'a:2:{i:0;b:0;s:8:"auto_add";a:0:{}}'; // ok
Au fait, vous ne devriez jamais manuellement unserialize dans la base de données WordPress.
Lorsque vous devez obtenir une option (ou des métadonnées, ou tout ce qui peut être sérialisé), utilisez les fonctions WP: elles désérialisent la valeur en cas de besoin.
Par exemple. pour les options, utilisez get_option
.
Si vous êtes intéressé par la désérialisation de WordPress, voir maybe_unserialize
et is_serialized
.