私はGithubの gMap プラグインを使ってGoogle Mapsのショートコードを作成しようとしています。これについては、それぞれのショートコード用のカスタムインラインスクリプトを、終了本体タグの直前、jQueryおよび他のすべてのスクリプトのロード後にエコーする必要があります。
次のショートコードは機能しますが、すべてのショートコードに対してではなく、インラインスクリプトを1回だけ追加します。 3つの[map]ショートコードを追加するときは、それぞれのショートコードのインラインスクリプト、3つのインラインスクリプトをフッターに追加する必要があります。しかし、それはただ一つのスクリプトを追加するだけです。これは最後のショートコードからのものです。
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は3つのインラインスクリプトをすべて保持していますが、add_actionで$ scriptを呼び出そうとすると、次のようになります。
add_action( 'wp_footer', array ( __CLASS__, $script ), 20 );
次のようなエラーが表示されます。
「最初の引数は有効なコールバックであると期待されています」
私はここでどんな助けにも感謝します。
ショートコード関数を呼び出すたびに、前のスクリプトvarを現在のバージョンで上書きします。文字列ではなく配列にします。
self::$var[] = $script;
そしてforeachで出力します。
public static function footer()
{
foreach( self::$var as $script ){
echo $script;
}
}