web-dev-qa-db-fra.com

Rappel de code court pour add_action ('wp_footer')

J'essaye de construire un shortcode Google Maps en utilisant le plugin gMap de Github, pas un iframe simple. Pour lequel je dois faire écho à un script en ligne personnalisé pour EACH shortcode, juste avant la balise body de fermeture, après que jQuery et tous les autres scripts ont été chargés.

Le shortcode suivant fonctionne, mais il ajoute le script en ligne une seule fois, pas pour chaque shortcode. Quand j'ajoute trois shortcodes [map], il faut ajouter le script en ligne pour chaque og les shortcodes, trois scripts en ligne, au pied de page. Mais cela n’ajoute qu’un seul script. Quel est celui du dernier shortcode.

class map_class
{
    protected static $var = '';

    public static function map_callback($atts) 
    {     
        extract(shortcode_atts(array(
                'address'               => 'Main Street, New York City, United States',
                'zoom'                      => '14'
            ), $atts));

            $id= Rand();

            $script  = '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>';
            $script .= '<script type="text/javascript">
                                        jQuery(document).ready(function(){
                                            jQuery("#googlemap' . $id . '").gMap({
                                                address: "' . $address . '",
                                                zoom: ' . $zoom . '
                                            });
                                        });
                                    </script>';

        self::$var = $script;

        add_action( 'wp_footer', array ( __CLASS__, 'footer' ), 20 );

                return '<div id="googlemap' . $id . '" class="googlemap" style="height: ' . $height . '"></div>';           
    }

    public static function footer() 
    {
      echo self::$var;
    }

}
add_shortcode( 'map', array ( 'map_class', 'map_callback' ) );

$ script contient les trois scripts en ligne, mais lorsque j'essaie d'appeler $ script dans add_action, comme ceci:

add_action( 'wp_footer', array ( __CLASS__, $script ), 20 );

.. je reçois l'erreur suivante:

"Le premier argument devrait être un rappel valide"

J'apprécie toute aide ici.

1
tomyam

chaque fois que vous appelez la fonction shortcode, vous écrasez le script précédent avec la version actuelle. faites-en un tableau au lieu d'une chaîne:

self::$var[] = $script;

puis sortie avec foreach:

public static function footer() 
{
    foreach( self::$var as $script ){
        echo $script;
    }
}
0
Milo