Google Map Widget in the Cornerstone is giving me the bad load speed

Hello Team,

I implemented your google map widget in the cornerstone but it’s increasing the page load speed.
So I tried to use this code to show map after user interaction like click, touch or scroll etc. I made a component with map widget called “google-map-component”.
And also made a raw content widget with this code

#lazy-map-placeholder { width: 100%; height: 100%; } --------------

But it’s not displaying the map. Can you help me?

add_action(‘wp_ajax_lazy_load_map’, ‘lazy_load_map_callback’);
add_action(‘wp_ajax_nopriv_lazy_load_map’, ‘lazy_load_map_callback’);

function lazy_load_map_callback() {
echo do_shortcode(’[cs_gb name=“google-map-component”]’);
wp_die();
}

add_action(‘wp_footer’, function () {
?>

<script>
(function () {
    let hasLoaded = false;

    function loadScript(src, callback) {
        const script = document.createElement('script');
        script.src = src;
        script.async = true;
        script.onload = callback;
        document.head.appendChild(script);
    }

    function loadMap() {
        if (hasLoaded) return;
        hasLoaded = true;

        const placeholder = document.getElementById('lazy-map-placeholder');

        // Load HTML via AJAX
        fetch('<?php echo admin_url('admin-ajax.php?action=lazy_load_map'); ?>')
            .then(response => response.text())
            .then(html => {
                placeholder.innerHTML = html;

                // Inject cs-google-maps if not already loaded
                if (typeof cs === 'undefined') {
                    const csScript = document.createElement('script');
                    csScript.src = '<?php echo cs_js_asset_get("assets/js/site/cs-google-maps")["url"]; ?>';
                    csScript.onload = () => loadGoogleMapsAPI();
                    document.head.appendChild(csScript);
                } else {
                    loadGoogleMapsAPI();
                }

                function loadGoogleMapsAPI() {
                    // Define callback before loading API
                    window.csGoogleMapsLoad = function () {
                        if (window.cs && typeof cs.init === 'function') {
                            cs.init(document.getElementById('lazy-map-placeholder'));
                            console.log("✅ Map initialized.");
                        }
                    };

                    // Load Google Maps API with callback
                    if (!window.google || !window.google.maps) {
                        const gmapScript = document.createElement('script');
                        gmapScript.src = "https://maps.googleapis.com/maps/api/js?v=3&key=???&loading=async&callback=csGoogleMapsLoad";
                        document.head.appendChild(gmapScript);
                    } else {
                        window.csGoogleMapsLoad();
                    }
                }
            });

        // Remove interaction listeners
        window.removeEventListener('scroll', loadMap);
        window.removeEventListener('click', loadMap);
        window.removeEventListener('touchstart', loadMap);
    }

    // Trigger on first interaction
    window.addEventListener('scroll', loadMap, { once: true });
    window.addEventListener('click', loadMap, { once: true });
    window.addEventListener('touchstart', loadMap, { once: true });
})();
</script>
<?php

});

Hi David,

Thanks for reaching out.
It seems the issue is related to custom coding, which goes beyond the scope of Theme Support. However, I reviewed the code you’ve added and would suggest the following:

  • Enqueue the script properly in your theme or plugin.

  • Pass the AJAX URL using a localized JavaScript variable (via wp_localize_script()).

If you’re not familiar with this approach, I recommend hiring a developer who can assist you with the customization. Alternatively, you can avail of our newly launched service called One, where we answer the questions beyond normal theme support.

Thanks

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.