it-swarm.com.de

Wie kann ich auf a PHP Variabel in einem anderen PHP Funktion

Ich möchte die Variable $ atts aus der Funktion lax_google_map_maker () in lax_google_map_init () verwenden. Wie greife ich darauf zu? Ich habe versucht, es zu "globalisieren", aber aus irgendeinem Grund hat es nicht funktioniert.

function lax_google_map_init() {
    wp_enqueue_script('google-maps', 'http://maps.googleapis.com/maps/api/js?sensor=false');
    wp_enqueue_script('lax_google_map_script', plugins_url('js/lax_google_map_script.js', __FILE__), array('google-maps','jquery'));

    $params = array (
       'latitude'=>  '39.01',
       'longitude'=> '-76.02'
        );

    wp_localize_script('lax_google_map_script', 'lax_map_params', $params); 
}

add_action('init', 'lax_google_map_init');


function lax_google_map_maker($atts,$content=null) {

     $atts = shortcode_atts( array(
        'latitude'=>'38.9205',
               'longitude'=>'-77.04505920410156'),
        $atts);

    $output .= '<div id="map_canvas" style="width: 500px; height: 500px; border:1px solid black;"></div>';

    return $output;
}


 add_shortcode('lax-google-map', 'lax_google_map_maker');

Mein Ziel ist es, die Variable $ params mit den $ atts des Shortcodes zu setzen. Nach meinem Verständnis muss die Variable $ params dieselbe Funktion wie die Zeile wp_enqueue_script und die Zeile wp_localize_script haben. Ansonsten würde ich es in eine neue Funktion ausbrechen und die $ atts als Parameter übergeben.

Wenn es eine Möglichkeit gäbe, $ atts an die Funktion lax_google_map_init zu übergeben, wäre ich golden.

Ich habe alles versucht, was mir einfällt. Wir freuen uns auf Ihre guten Ideen.

3
Laxmidi

Guten Tag, Freund ;)

Ich habe dies getan, indem ich die Variablen innerhalb eines Skript-Tags direkt innerhalb des Körpers ausgegeben habe. Ich habe mit Ihrem Code herumgespielt und mir diese Lösung ausgedacht:

function lax_google_map_init() {

  // Don't bother loading the scripts if we're in the admin area
  if ( is_admin() ) {
    return;
  }

  wp_enqueue_script( 'google-maps', 'http://maps.googleapis.com/maps/api/js?sensor=false' );
  wp_enqueue_script( 'lax_google_map_script', plugins_url( 'js/lax_google_map_script.js', __FILE__ ), array ( 'google-maps','jquery' ) );
}
add_action( 'wp_print_scripts', 'lax_google_map_init' );


function lax_google_map_maker( $atts, $content = null ) {
    // Default params.
    $atts = shortcode_atts( array ( 
      'latitude'=>'-25.068302',
      'longitude'=>'-130.095581',
      'zoom' => 18,
      'id' => 'map_canvas',
      'width' => '500px',
      'height' => '500px'
      ), $atts );

    $output .= '<div id="' . esc_attr( $atts['id'] ) . '" style="width:' . esc_attr( $atts['width'] ) . '; height: '. esc_attr( $atts['height'] ) .'; border:1px solid black;"></div>';
    $output .= 
    "<script>" . "\n" . 
      "var lax_map_params_" . $atts['id'] . " = " . json_encode( $atts ) . "; lax_google_map_maker_js( lax_map_params_" . $atts['id'] . " );" . "\n" . 
    "</script>" . "\n";  

    return $output;
}
add_shortcode( 'lax-google-map', 'lax_google_map_maker' );
// [lax-google-map latitude='-66.552635' longitude='84.137421' zoom='12'] // no id, usees default
// [lax-google-map latitude='65.032366' longitude='-376.747681' zoom='12' id="map_1"] // id specified.  Will be used in js variable name, so no hyphens or other chars that will break js variable names allowed.
// [lax-google-map latitude='-25.068302' longitude='-130.095581' zoom='12' id="map_2" width="200px" height="200px"] // custom dimensions
// [lax-google-map latitude='-34.397' longitude='150.644' zoom='12' id="map_3"]

Hier ist die Datei lax_google_map_script.js:

jQuery(document).ready(function($) { 
  // alert ('hi');
});

function lax_google_map_maker_js( args ) {

  // Default js args.  Args passed to function will override these.
  var default_args = {
    latitude :  -34.397,
    longitude :  150.644,
    id : 'map_canvas',
    zoom : 8
  }; // @link http://www.openjs.com/articles/optional_function_arguments.php

  for ( var index in default_args ) {
    if ( typeof args[index] == "undefined" ) {
      args[index] = default_args[index];
    }
  }

  var latlng = new google.maps.LatLng(args['latitude'], args['longitude']);

  var myOptions = {
    zoom: parseInt( args['zoom'] ),
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

    // alert ('hi'); // just showing that you can use jQuery with the dollar method in here.

  var map = new google.maps.Map(document.getElementById( args['id'] ), myOptions);  
}

Anmerkungen: localize_script kann nur js-Arrays mit einer Tiefe von 1 Ebene ausführen. Ich persönlich habe diesen Weg also nicht eingeschlagen (Quelle - siehe Kommentare) .

Ich habe den Inline-Js-Variablentrick aus einer großartigen WPSE-Antwort von Bainternet gelernt.

Ich denke, der beste Weg, dies zu tun, besteht darin, alles in eine Klasse zu setzen und die verketteten js aus einer Eigenschaft auszugeben, die in korrekt formatierte js-Tags eingeschlossen ist, die für die Aktion wp_footer ausgelöst wurden, die durch eine Methode ausgelöst wurde, die prüft, ob der Shortcode verwendet wurde. Dies ist bei zukünftigen Überarbeitungen zu berücksichtigen. Optimales Laden von Skripten

In meiner ursprünglichen Antwort habe ich die jQuery-Bits entfernt, da jQuery im Skript nicht verwendet wurde. jQuery.noConflict (); wird nicht benötigt, wenn die in WP enthaltene Version von jQuery verwendet wird. In meiner überarbeiteten Antwort habe ich das jQuery-Zeug oben gelassen, aber die Funktion lax_google_map_maker_js () aus diesem Block entfernt, da andernfalls ein Fehler auftritt.

1
Dave Romsey