Add_action(‘wp_footer’)的快捷码回调

时间:2014-01-07 作者:tomyam

我正在尝试使用gMap 来自Github的插件,而不是普通的iframe。为此,我必须在jQuery和所有其他脚本加载后,在结束body标记之前,为每个短代码回显一个自定义内联脚本。

以下短代码可以工作,但它只添加一次内联脚本,而不是针对每个短代码。当我添加三个[映射]短代码时,它应该为每个og添加内联脚本短代码,三个内联脚本,到页脚。但它只添加了一个脚本。这是最后一个短代码中的一个。

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保存所有三个内联脚本,但当我尝试在add\\u操作中调用$script时,如下所示:

add_action( \'wp_footer\', array ( __CLASS__, $script ), 20 );
。。我得到以下错误:

“第一个参数应为有效回调”

我很感激这里的任何帮助。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

每次调用shortcode函数时,都会用当前版本覆盖以前的脚本var。将其设置为数组而不是字符串:

self::$var[] = $script;
然后用foreach输出:

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

结束