J'ai construit un type de message personnalisé "shop" avec le plugin Custom Post Type UI et ajouté un champ "adresse" (type Google Map) avec Plugin Champs Personnalisés Avancés .
D'après la réponse de WP_Query('post_type=shop');
, j'ai obtenu ce qui suit:
$shop = WP_Query('post_type=shop');
while($shop->have_post()) {
$shop->the_post();
$location = get_field('map-location');
if($location != null) {
echo $location['address'];
}
}
Ici, j'ai une liste d'adresses. Comment rechercher avec cette "adresse"? Supposons que l'utilisateur souhaite effectuer une recherche dans un magasin situé à Londres, comment puis-je y parvenir?
Merci.
UPDATE
Exemple de résultat de la recherche "15":
Vous avez besoin d'un meta_query
qui ressemble à ceci:
$args = array(
'post_type' => 'shop',
'meta_query' => array(
array(
'key' => 'map-location',
'value' => 'London',
'compare' => 'LIKE' // the = operator might work depending on how your data is stored
),
)
);
Remarque: je fais certaines hypothèses sur la manière dont ACF stocke les données.
Vous pouvez utiliser l'expression régulière RLIKE
:
$val = '15';
$args = array(
'post_type' => 'shop',
'meta_query' => array(
array(
'key' => 'map-location',
'value' => 's:7:"address";s:[0-9]+:"[^"]*' . preg_quote( $val ) . '[^"]*";',
'compare' => 'RLIKE'
),
)
);
bien que cela puisse échouer si vos données d'adresse contiennent un double devis. Si vous avez toujours un champ lat
et un champ lng
après le address
, vous pouvez étendre l'expression pour qu'elle corresponde à celle-ci et supprimer le recours aux bits [^"]
(en les remplaçant par des points).
Vous pouvez utiliser la méta-requête pour rechercher un texte de champ particulier.
$val = 'London';
$args = array(
'post_type' => 'shop',
'meta_query' => array(
array(
'key' => 'map-location',
'value' => $val,
'compare' => 'LIKE'
),
)
);
$query = new WP_Query($arg);