j'ai plusieurs méta (champs personnalisés) dans les messages tels que "cd_meta" qui lui (cd_meta) ont une méta comme "artiste", également "artiste" méta peut-être une ou plusieurs valeurs dans array
je veux obtenir des messages qui "artiste" méta ont une valeur spécifique et nombre d'entre eux
Lorsque vous stockez un tableau sous la forme meta_value
, vous stockez une chaîne contenant des données sérialisées représentant le tableau d'origine. Ce format est approprié pour les données qui sont uniquement destinées à être affichées.
Les données que vous prévoyez d'utiliser pour la commande ou la recherche, ou de toute autre manière qui ne fait pas qu'afficher les informations doivent PAS être stockées sous forme de tableau sérialisé . Vous devez stocker chaque clé de tableau dans son propre champ méta.
Dans votre exemple, vous souhaitez rechercher un message dans le champ méta artist
, pensez donc à changer le tableau artist[1599, 5240]
en deux champs méta à valeur unique (tous avec " artiste "en tant que meta_key
, vous pouvez stocker une clé plusieurs fois):
[artiste] => '1599'
[artist] => '5240'
il est sérialisé et doit chercher en série, comment le faire?
Il est techniquement possible de rechercher du texte avec l'opérateur LIKE et la valeur environnante avec "
, mais sa requête est inefficace. Vous ne pouvez garantir la cohérence des résultats, car la valeur recherchée peut apparaître dans une autre clé de tableau (par exemple, rev
, master
, etc.). Stocker artist
en tant que méta-champs séparés est une solution préférable.
'meta_query' => array(
array(
'key' => 'cp_meta',
'value' => '"1599"', // OR ':"1599"'
'compare' => 'LIKE',
),
S'il vous plaît changer votre requête SQL
$args = array(
'meta_query' => array(
array(
'key' => 'cp_annonceur',
'value' => 'professionnel',
'compare' => '=',
)
)
);
$query = new WP_Query($args);