8753 sujets

Développement web côté serveur, CMS

Bonjour,

dans un contexte Wordpress, je crée une option dans la table wp_options avec la settings API

la valeur de cette option est un tableau avec indices automatiques

il est donc stocké dans la table wp_options sous ce format;

 a:5:{i:0;s:3:"one";i:1;s:3:"two";i:2;s:5:"three";i:3;s:4:"four";i:4;s:4:"five";}


et lorsqu'il est récupéré dans Wordpress avec get_option() il est désérialisé comme ceci:


array (size=5)
  0 => string 'one' (length=3)
  1 => string 'two' (length=3)
  2 => string 'three' (length=5)
  3 => string 'four' (length=4)
  4 => string 'five' (length=4)

Tout ça est classique...

Maintenant je veux récupérer ce tableau dans l'éditeur Gutenberg (javascript),

j'y arrive avec la commande suivante (gibi_album_setting1 est le nom de l'option)


  const bidule = useSelect(
    ( select ) => select( 'core' ).getSite()?.gibi_album_setting1,
    []
  );


Cependant je ne récupère que la valeur sérialisée stockée dans la table wp_options.

MAINTENANT ce que je voudrais faire c'est transformer cette chaine en un tableau JS pour récupérer les valeurs du tableau et les afficher dans Gutenberg.

Je recherche une fonction pour faire ça.

J'ai trouvé un article sur stackowerflow mais c'est du vieux code et je n'arrive pas à l'intégrer dans le React de WordPress...

Quelqu'un a une idée?

merci




-
Modifié par lionel_css3 (14 Jul 2024 - 18:56)
Modérateur
Salut,

Je ne comprends pas trop ton souci. En php, tu dois désérializer via la fonction : unserialize
Ensuite pour transmettre au JS, tu fais un json_encode. pour finir, tu fais un JSON.parse en JS
niuxe a écrit :
Salut,

Je ne comprends pas trop ton souci. En php, tu dois désérializer via la fonction : unserialize
Ensuite pour transmettre au JS, tu fais un json_encode. pour finir, tu fais un JSON.parse en JS


Oui mais là j'ai pas accès au PHP dans Gutenberg, je récupère juste la valeur stockée dans la BDD de WordPress sous forme de chaine sérialisée au format Php.

J'ai trouvé la librairie Js Locutus qui fait très bien le job.... et ça marche parfaitement.

J'arrive à récupérer les éléments du tableau et à alimenter dynamiquement un composant <SelectControl> dans Gutenberg
Meilleure solution
Olivier C a écrit :
Ok, mais du coup tu es sûr que tu avais besoin d'une librairie pour faire du JSON.parse ?


je ne passe pas par Json... et si la librairie existe c'est bien qu'elle répond à un besoin, non?
Salut !

La méthode serialize en PHP applique l’algorithme décrit dans cet article Wikipedia. Sans utiliser une librairie, tu aurais dû implémenter une méthode deserialize capable de parser une telle chaîne de caractère.