Ich verwende WordPress update_post_meta um ein Array wie zu speichern
$obj = array(
'array' => array(1, 'zwei', !!3),
'string' => 'abc',
'bool' => true,
'bool2' => false,
'integer' => 1,
'integer2' => 17
);
update_post_meta($post_ID, 'my-key', $obj);
Wenn ich jedoch das Rohfeld überprüfe, bekomme ich
a:6:{s:5:"array";a:3:{i:0;i:1;i:1;s:4:"zwei";i:2;s:1:"1";}s:6:"string";s:3:"abc";s:4:"bool";s:1:"1";s:5:"bool2";s:1:"0";s:7:"integer";i:1;s:8:"integer2";i:17;}
während es sein sollte
a:6:{s:5:"array";a:3:{i:0;i:1;i:1;s:4:"zwei";i:2;b:1;}s:6:"string";s:3:"abc";s:4:"bool";b:1;s:5:"bool2";b:0;s:7:"integer";i:1;s:8:"integer2";i:17;}
Möglicherweise stellen Sie fest, dass alle booleschen Werte als Zeichenfolge gespeichert werden (b:1 = s:1:"1"
)
Das Problem tritt nur bei bestimmten WordPress-Installationen auf und nicht bei jeder. Die habe ich auch gecheckt serialisieren Funktion, die korrekt funktioniert (gibt zurück b:1
)
Auch mit get_post_meta
get_post_meta($post_ID, 'my-key', true);
und überprüfen Sie den Wert mit is_bool gibt false zurück (offensichtlich)
BEARBEITEN: Ich habe gerade bemerkt, dass auch Integer als Strings gespeichert werden
Gibt es ‘sanitize_meta’-Filter, vielleicht von bestimmten Plugins, die auf die Installationen angewendet werden, in denen dies geschieht? Suchen Sie in der Codebasis nach
add_filter('sanitize_
– Tom
10. Oktober 2013 um 9:17 Uhr
welche WordPress-Version verwendest du? Können Sie wp aktualisieren und dann erneut überprüfen? Ich habe ein wp 3.5.2 installiert und das Problem war da, nachdem ich auf 3.6.1 aktualisiert habe, wurde das Problem behoben
– jnhghy – Alexandru Jantea
11. Oktober 2013 um 6:09 Uhr
WordPress >= 3.6 verwendet wp_unslash während 3.5.2 noch verwendet striplashes_deep
– Xaver
16. Oktober 2013 um 21:08 Uhr