web-dev-qa-db-fra.com

Comment ajouter une valeur à une option wp_options qui est un tableau?

Quel est le meilleur moyen d'ajouter une valeur d'option à une option enregistrée dans wp_options qui est un tableau? Avec phpmyadmin, le champ option_value est

a:9:{i:3;s:15:"value1";i:6;s:5:"value2";i:7;s:21:"value3";i:8;s:15:"value4";i:9;s:7:"value5";i:10;s:4:"value6";i:11;s:5:"value7";i:12;s:8:"value8";i:13;s:7:"value9";}

Comment puis-je ajouter de la valeur10? update_option remplacera la valeur_option entière, n'est-ce pas?

2
alex

L'option que vous montrez dans votre question est un tableau sérialisé. La récupération de l'option avec get_option() vous restitue le tableau, mais sans numéro de série. Ceci est fait par maybe_unserialize() , que get_option utilise. Ajoutez simplement une paire new 'key' => 'value' au tableau que vous avez récupéré, puis mettez à jour l’option avec update_option() , et voilà que vous avez ajouté la valeur supplémentaire à votre option.


Comme indiqué dans le commentaire, vous ne pouvez pas comprendre pourquoi cela ne fonctionne pas et, comme mentionné, voici un code exemplaire qui fonctionne:

// this is just for proof of concept   
// add new data, we don't want to temper with the original
// it is an array to resemble your case
$new_new_arr = array(
    'key01' => 'value01',
    'key02' => 'value02'
);
// debug the data
print_r( $new_new_arr );
// now we actually add it tp wp_options
add_option( 'new_new_opt', $new_new_arr );
// lets get back what we added
$get_new_new_arr = get_option( 'new_new_opt' );
// debug the data
print_r( $get_new_new_arr );
// lets create the second array with the additional key => value pair
$add_new_new_opt = array( 'key03' => 'value03' );
// debug the data
print_r( $add_new_new_opt );
// lets combine, merge the arrays
$upd_new_new_arr = array_merge( $get_new_new_arr, $add_new_new_opt );
// debug the data
print_r( $upd_new_new_arr );
// now update our option
update_option( 'new_new_opt', $upd_new_new_arr );
// get back the updated option
$get_upd_new_new_arr = get_option( 'new_new_opt' );
// debug the data
print_r( $get_upd_new_new_arr );
// lets cleanup and delete the option
delete_option( 'new_new_opt' );
5
Nicolai