web-dev-qa-db-fra.com

Comment rechercher une adresse de carte dans un type de message personnalisé?

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":

  • 東 大街 15 號 B 地下
  • 偉業 街 103 工業 大廈 地鋪
  • 旭日 街 一號 廈 大 一 期 A 座 地下
1
Raptor

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.

2
s_ha_dum

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).

1
bonger

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);

Référence de classe/requête WP

0
Shrikant D