Accéder a une meta_key serializée via une requête

Eléphanteau du PHP | 11 Messages

20 juin 2022, 18:02

Bonjour. Voici un pblm que je n'arrive pas résoudre.Dans Wordpress dernière version...
Mais cela reste du PHP... Je vous expose ce que je pense comprendre.

J'essaye d'accéder a une meta_key (agenda_date_debut) qui se trouve dans un tableau. Elle est donc sérialisée.
Si je regarde dans la base de donnée, voilà ce que j'ai :

Array ( [_edit_lock] => Array ( [0] => 1655726885:2 ) [_edit_last] => Array ( [0] => 2 ) [agenda_compagnie] => Array ( [0] => Compagnie machinbidule ) [agenda_infos] => Array ( [0] => Représentation HORS LES MURS ) [agenda_debut_test] => Array ( [0] => 1654859700 ) [agenda_group] => Array ( [0] => a:1:{i:0;a:2:{s:16:"agenda_date_debut";i:1654885800;s:14:"agenda_date_fin";i:1654902000;}} ) [agenda_date_debut] => Array ( [0] => [1] => ) [agenda_tarif_reduit] => Array ( [0] => 4,00 ) )

De fait... si j'appel la meta_key (agenda_date_debut), elle est introuvable. Elle n'est pas référencé dans la base de donnée
puisqu'elle est elle contenu dans meta_key (agenda_group)

Voici mon code ( Wordpress ) dans une page d'archive:
$args = array(
		'post_type'  => 'date',
		'order_by'  => 'meta_value_num',
		'order'  => 'asc',
		'meta_query' => array(
			array(
			   'key'     => 'agenda_date_debut',
			),
		  ),
	);

	$archive_date_query = new WP_Query($args);

	if ($archive_date_query->have_posts()) {
      get_template_part('template-parts/archive-date');
}
Mais évidemment cela ne fonctionne pas.
J'ai essayé beaucoup de choses : [agenda_group][0][agenda_date_debut] par exemple

Mais je coince. Comment appeler la meta_key ? selon vous.

====

J'essaye aussi de désérialiser mes données, comme cela :
$metas_date_s = get_post_meta(get_the_ID(), '', true);
$metas_date = maybe_unserialize($metas_date_s);
Mais j'ai toujours les données de [agenda_group] qui restent sérialisées.

Mammouth du PHP | 1967 Messages

20 juin 2022, 20:14

Il est impossible de faire ta query sur un élément sérialiser en sql, pas possible de déserialisé en sql non plus à ma connaissance

la seule chose que je vois est de filtrer sur un LIKE et désérialisé et filtrer en php sur tous ce qui sort
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

20 juin 2022, 21:28

La requête en comparant avec LIKE marche.
Cela permet d'obtenir la "key" mais pas la "value" pour faire un "order_by".
D'autant plus que mes "values" sont des dates au format unix.

Donc, pas de solutions ??? J'ai du mal à le croire :-)

En JS peut-être ?

Mammouth du PHP | 1967 Messages

21 juin 2022, 07:57

JS n'est pas une bonne idée, mais en php tu pourras faire ce que tu veux
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

21 juin 2022, 10:56

Je préférerais le PHP, mais pour le moment il semble impossible d'accéder à une meta_key et surtout à sa valeur si elles sont sérialisées.
J'ai tenté de désérialisé les données mais l'array qui m'intéresse reste sérialisé. Donc... je ne vois pas du tout.
La solution avec [ compare => 'LIKE'; ] me paraît très périlleuse.

J'ai donc passé la valeur de meta_key dans le html comme çà :
data-order="<?php echo $agenda_debut; ?>"
puis avec jQuery (je met une balise PHP car la balise CODE pique les yeux) :
$(".container--date").append(function () {
  return $('article.cp-date').sort(function (a, b) {
   return $(a).attr("data-order") - $(b).attr("data-order");
})
})
C'est très simple, c'est temporaire... Mais çà marche.
Si qqnl a une autre solution, je veux bien.

Mammouth du PHP | 1967 Messages

21 juin 2022, 12:57

ne confond pas ta requète SQL et le post traitement php.

je connais pas Wordpress mais il doit y avoir moyen de faire le traitement en php aprés la requète mais avant de génerer le HTML
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube