[RESOLU] [wordpress] Générer markers leaflet / requête JQuery

Eléphanteau du PHP | 21 Messages

23 avr. 2023, 17:48

Bonjour,
Sur wordpress, dans un modèle de page, j'affiche une carte Leaflet et fait une recherche Jquery de tous mes posts publiés, que je souhaiterais afficher sous forme de markers.

Je parviens à ce stade :
- à afficher la carte ;
- à faire ma requête (notamment en extrayant des champs ACF pour les latitude et longitude). En tout cas, je parviens à les afficher dans mes tests.

Je dispose en théorie du code susceptible de générer les variables nécessaires à la création des markers, que je devrais, sauf erreur, intégrer dans la boucle, avant mon "// 4." (voir infra).

Mais cela ne fonctionne pas, cela provoque une erreur critique.

Si je mets ce code juste avant la balise </div>, j'ai bien un marker, celui de la page en cours.

Le code de ma page :

Code : Tout sélectionner

<?php /** * Template Name: Clean Page 2 * This template will only display the content you entered in the page editor */ ?> <!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta charset="<?php bloginfo( 'charset' ); ?>"> <meta name="viewport" content="width=device-width, initial-scale=1"> <?php wp_head(); ?> </head> <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" integrity="sha256-kLaT2GOSpHechhsozzB+flnD+zUyjE2LlfWPgU04xyI=" crossorigin=""/> <script src="https://unpkg.com/[email protected]/dist/leaflet.js" integrity="sha256-WBkoXOwTeyKclOHuWtc+i2uENFpDZ9YPdf5Hf+D7ewM=" crossorigin=""></script> <body class="cleanpage"> <div id="mapid" style="width:100%; height: 100svh;" class="desktop_visible"> <?php // 1. On définit les arguments pour définir ce que l'on souhaite récupérer $args = array( 'post_type' => 'post', 'post_status'=>'publish', 'posts_per_page' => -1, ); // 2. On exécute la WP Query $the_query = new WP_Query( $args ); // 3. On lance la boucle ! if( $the_query->have_posts() ) : while( $the_query->have_posts() ) : $the_query->the_post(); $titre = the_title(); $lat = get_field("latitude_depart"); $lng = get_field("longitude_depart"); echo $titre; echo "<br>"; echo $lat; echo " / "; echo $lng; echo "<br>"; echo "<br>"; endwhile; endif; // 4. On réinitialise à la requête principale (important) wp_reset_postdata(); ?> </div> <script> jQuery(function($) { var map = L.map('mapid').setView([46.622013, 1.853553], 6); L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '<a href="&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors', minZoom: 0, maxZoom: 22, }).addTo(map); $('.marker').each(function() { var lat = $(this).attr('data-lat'); var lng = $(this).attr('data-lng'); var name = $(this).attr('data-title'); var marker = new L.marker([ lat, lng ]).bindPopup( name ).addTo( map ); }); }); </script> <?php wp_footer(); ?> </body> </html>
Et le code que je souhaiterais exploiter :

Code : Tout sélectionner

<div class="marker" data-url="<?php the_permalink(); ?>" data-title='<h4><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h4>' data-lat="<?php echo $lat; ?>" data-lng="<?php echo $lng; ?>"></div>
Je tourne en rond... Une idée ? Merci d'avance !

Avatar du membre
Mammouth du PHP | 1490 Messages

23 avr. 2023, 18:55

"Mais cela ne fonctionne pas, cela provoque une erreur critique."

Quelle est l'erreur ?

Eléphanteau du PHP | 21 Messages

24 avr. 2023, 12:10

Bonjour@two3d,

A l'affichage du site :
"Il y a eu une erreur critique sur ce site."

En activant le mode debug :
Parse error: syntax error, unexpected token "<" in /xxxx/xx/xxxxxxxx/htdocs/xxxxxxxx/wp-content/themes/xxxxx/xxxxxxx.php on line 54

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9686 Messages

24 avr. 2023, 12:41

Erreur de syntaxe à ligne 54 du fichier concerné, qu'est-ce qu'il y a ?
Qu'as-tu essayé pour corriger cette erreur ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 21 Messages

24 avr. 2023, 13:51

Ah oui, mince, j'ai oublié le code, sésolé !

C'est mon fameux code sensé me générer les markers dans la boucle :

Code : Tout sélectionner

<div class="marker" data-url="<?php the_permalink(); ?>" data-title='<h4><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h4>' data-lat="<?php echo $lat; ?>" data-lng="<?php echo $lng; ?>" </div>
Si je le place dans la boucle, j'ai l'erreur.
Si je le place hors de la boucle, après le

Code : Tout sélectionner

wp_reset_postdata(); ?>
J'ai seulement le 1er marker qui s'affiche (et encore, avec un titre et un lien vers la page en cours).

Avatar du membre
Mammouth du PHP | 1490 Messages

24 avr. 2023, 13:58

Il te manque un > fermant pour ton div :
<div class="marker"
data-url="<?php the_permalink(); ?>"
data-title='<h4><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h4>'
data-lat="<?php echo $lat; ?>"
data-lng="<?php echo $lng; ?>"
<<<< ici >>>>
</div>

Pour éviter d'avoir des erreurs avec des potentiels ' dans ton data-title, je te conseil de mettre ton contenu de popup dans la div et ne pas afficher la div.

Eléphanteau du PHP | 21 Messages

26 avr. 2023, 17:30

Bonsoir !
J'ai fermé le div, merci.
Pas de changement cependant dans ma génération de marqueurs.
Qu'entends-tu par
Pour éviter d'avoir des erreurs avec des potentiels ' dans ton data-title, je te conseil de mettre ton contenu de popup dans la div et ne pas afficher la div.
?

Avatar du membre
Mammouth du PHP | 1490 Messages

26 avr. 2023, 17:53

Ton <?php the_title(); ?> pourrait contenir des ', si c'est le cas, ça va casser ton data-title et mettre en erreur ton HTML.