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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Accéder a une meta_key serializée via une requête

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

par Spols » 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

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

par bdpnl » 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.

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

par Spols » 21 juin 2022, 07:57

JS n'est pas une bonne idée, mais en php tu pourras faire ce que tu veux

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

par bdpnl » 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 ?

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

par Spols » 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

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

par bdpnl » 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.