Utiliser l’API Google Maps avec ACF dans votre administration WordPress

Mis à jour le :

Si vous utilisez le champ Google Maps de l’extension Advanced Custom Fields, il est dorénavant nécessaire d’obtenir une clé d’API auprès de Google pour chacun de vos projets Web.

ACF vous permet de déclarer cette clé pour la partie back-office de WordPress, à l’aide d’un réglage ou d’un filtre. Sans elle, la carte du champ s’affiche assombrie, barrée de la mention « For development purposes only », et un message indique « Impossible de charger Google Maps correctement sur cette page ».

Google exige en effet une clé valide pour chaque requête, sur les anciens sites comme sur les nouveaux, ainsi qu’un compte dont la facturation est activée. Si vous vérifiez votre console JavaScript à partir des outils de développement de votre navigateur favori, il y a de fortes chances que vous obteniez les messages d’erreurs suivants :

Google Maps JavaScript API error: ApiProjectMapError
https://developers.google.com/maps/documentation/javascript/error-messages#api-project-map-error
Google Maps JavaScript API warning: NoApiKeys https://developers.google.com/maps/documentation/javascript/error-messages#no-api-keys

Pour obtenir cette fameuse clé, suivez simplement les instructions de Google. Elles sont très simples à comprendre et rédigées en français. Pas de panique donc !

Dans votre projet Google Cloud, activez la facturation, exigée par Google pour une utilisation en production, puis les trois API qu’utilise le champ d’ACF : Maps JavaScript API, Geocoding API et Places API.

Pour Places API, ACF s’appuie encore sur l’ancienne version, au statut « Legacy » chez Google depuis le 1er mars 2025 : la console JavaScript signale d’ailleurs que sa classe de recherche d’adresse, google.maps.places.Autocomplete, n’est plus disponible pour les nouveaux clients. Sur un nouveau projet, la documentation d’ACF indique d’activer cette ancienne Places API, et non Places API (New), en attendant que le champ passe à la nouvelle version.

Restreignez ensuite votre clé, comme le recommande Google dans ses bonnes pratiques de sécurité pour les clés d’API : limitez-la à vos sites Web et aux seules API utilisées. Elle apparaît en effet en clair dans le code source des pages où le champ affiche la carte.

ACF propose deux méthodes pour déclarer la clé, décrites dans la documentation de son champ Google Map. Elles fonctionnent avec la version gratuite comme avec ACF PRO, qui partage le même code : choisissez-en une seule. Elles valent aussi pour Secure Custom Fields, l’extension publiée par WordPress.org à partir du code d’ACF, qui reprend le même réglage et le même filtre.

Méthode n°1 – Le réglage google_api_key

Dans un mu-plugins de préférence ou votre fichier functions.php présent dans votre thème, copiez ces lignes de code :

/* ACF Google Maps */
function wpc_acf_init() {
	acf_update_setting('google_api_key', 'VOTRE_CLE_ICI');
}
add_action('acf/init', 'wpc_acf_init');

Remplacez VOTRE_CLE_ICI par la clé obtenue auprès de Google puis enregistrez le fichier.

Méthode n°2 – Le filtre acf/fields/google_map/api

Autre possibilité, au même endroit : le filtre acf/fields/google_map/api, qui reçoit les paramètres de chargement de l’API Google Maps, dont la clé. Remplacez là aussi VOTRE_CLE_ICI par votre clé :

function wpc_acf_google_map_api($api) {
	$api['key'] = 'VOTRE_CLE_ICI';
	return $api;
}
add_filter('acf/fields/google_map/api', 'wpc_acf_google_map_api');

Une fois la clé renseignée, Google Maps sera de nouveau opérationnelle en back-office et votre console JavaScript n’affichera plus de messages d’erreurs.

Si la console signale encore une erreur, son code vous indique quoi corriger : InvalidKeyMapError pour une clé erronée, ApiNotActivatedMapError si Maps JavaScript API n’est pas activée, LegacyApiNotActivatedMapError si c’est l’ancienne Places API, BillingNotEnabledMapError si la facturation n’est pas activée, RefererNotAllowedMapError si votre site ne fait pas partie de ceux autorisés pour la clé. Les avertissements sur google.maps.Marker et google.maps.places.Autocomplete, eux, viennent des classes qu’utilise encore ACF, et non de votre clé.

Ces deux méthodes servent au champ, dans l’administration : elles ne chargent pas l’API Google Maps sur les pages de votre site. Pour y afficher la carte, votre thème doit la charger lui-même avec votre clé, comme dans le code d’exemple de la documentation d’ACF citée plus haut.

Vous utilisez ACF avec Elementor ? Voici comment afficher un champ répéteur ACF dans Elementor.

Avatar de Aurélien Denis

Protégez votre site WordPress

Vos données sont précieuses,
ne prenez pas le risque de tout perdre.
Confiez-moi votre maintenance !

Ces articles devraient t’intéresser…

9 réponses

  1. Avatar de EtienneSteven
    EtienneSteven

    Salut Aurélien !

    Merci pour ce tuto pour afficher la carte dans le BackOffice..
    Je l’ai d’affiché, également dans le FrontOffice…
    Mais alors en revanche : IMPOSSIBLE d’effectuer une recherche d’une adresse dans la barre de recherche du ACF !!
    :O

    As-tu une idée ?

    En te remerciant.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Hello, il te faut vérifier ta console JS dans les outils de développement de ton navigateur afin d’identifier une éventuelle erreur.

  2. Avatar de SébastienSerre
    SébastienSerre

    Salut Aurélien, Merci pour cette astuce. jusque la je suivais ce tuto http://www.aliciaramirez.com/2015/02/advanced-custom-fields-google-maps-tutorial/ pour intégrer la carte en front.
    A Quel niveau dois ajouter la clé API penses tu?

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Au niveau du enqueue_script() tu rajoutes &key=TA_CLE. 😉

      1. Avatar de sebastienserre
        sebastienserre

        Merci 😉

      2. Avatar de Aglae361
        Aglae361

        Désolée pas encore au top dans les insertion 🙁
        Tu rajoute cela comment exactement ?

        wp_enqueue_script( ‘google-map’, ‘https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false’, array(), ‘3’, true );
        wp_enqueue_script( ‘google-map-init’, get_template_directory_uri() . ‘/lib/google-maps.js’, array(‘google-map’, ‘jquery’), ‘0.1’, true );
        wp_enqueue_script(‘google_api_key’, ‘AIzaSyAckdB04Mmtg69N-sQBmFjSsMbXQOdsCiI’);

        Les 2 premières lignes viennent du code issu de la page http://www.aliciaramirez.com/2015/02/advanced-custom-fields-google-maps-tutorial/
        J’ai crée mon fichier js (dans le dossier lib de mon thème, à la racine et l’ai appelé google-maps.js)

        J’ai créer ces wp_enqueue_script dans le fichier perso (perso-fonctions.php) que je rajoute au theme pour pas qu’il se fasse écraser en cas de mise à jour. Mon fichier perso-fonctions.php se trouve à la racine du theme

        J’ai bon ?

        1. Avatar de Aurélien Denis
          Aurélien Denis

          Bonjour,

          les instructions dans le tutoriel indiquent qu’il faut soit créer un mu-plugins, soit insérer le code dans functions.php de ton thème. 😉

          1. Avatar de Aglae361
            Aglae361

            Ben oui, j’ai vu mais étant donné que je suis avec Genesis et que j’utilise un theme enfant de Genesis (agency-pro), si je le met dans functions.php lorsque le thème enfant de Genesis va être mis à jour, je vais tout perdre, non ?

            Du coup, dans functions.php j’ai fait
            require_once( get_stylesheet_directory() . ‘/lib/perso-fonctions.php’ );

            car j’ai mis perso-fonctions.php dans un dossier lib à la racine du thème agency-pro.

            Dans perso-fonctions.php j’ai mis le code suivant :
            function my_theme_add_scripts() {
            wp_enqueue_script( ‘google-map-init’, get_template_directory_uri() . ‘/lib/google-maps.js’, array(‘google-map’, ‘jquery’), ‘0.1’, true );
            acf_update_setting(‘google_api_key’, ‘AIzaSyAckdB04Mmtg69N-sQBmFjSsMbXQOdsCiI’);
            }

            et dans google-maps.js (qui se trouve aussi dans le dossier lib à la racine du thème agency-pro) j’ai /* issu de http://www.aliciaramirez.com/2015/02/advanced-custom-fields-google-maps-tutorial/ */

            http://pastebin.com/Dzj4amPw

            Du coup il me semble que j’ai bon.
            Par contre je reste avec un rectangle blanc à la place de mon plan. Donc un truc ne vas pas.

          2. Avatar de Aurélien Denis
            Aurélien Denis

            Il faut vérifier les erreurs JS qui pourraient apparaitre. Je ne connais pas le fonctionnement de Genesis mais la logique d’un thème enfant est que justement on puisse y injecter des fonctions personnelles…