it-swarm.com.de

Ist es möglich, mit wp_localize_script globale JS-Variablen ohne ein bestimmtes Skripthandle zu erstellen?

Können wir irgendwie wp_localize_script () verwenden, um globale js-Variablen ohne ein bestimmtes Skript-Handle zu erstellen, auf das von allen js-Dateien aus zugegriffen werden kann, selbst wenn die js-Skripte mit wp_enqueue_script nicht ordnungsgemäß in die Warteschlange gestellt wurden?

Dies ist der Code, den ich verwende, der varibale für das 'Ajaxscript'-Handle erstellt, sodass ich nicht auf das Objekt' Ajaxobject 'in einer js-Datei zugreifen kann, die direkt von <script src="xxx" .... /> in die header.php aufgenommen wird.

wp_register_script( 'ajaxscript', get_bloginfo( 'template_url' ) . '/js/ajaxscript.js', array(), $version );
wp_enqueue_script( 'ajaxscript' );
wp_localize_script( 'ajaxscript', 'ajaxobject',
    array( 
        'ajaxurl'   => admin_url( 'admin-ajax.php' ),
        'ajaxnonce' => wp_create_nonce( 'itr_ajax_nonce' )
    )
);
27
Subharanjan

Anstatt in diesem Fall wp_localize_script zu verwenden, können Sie Ihre js-Variablen in wp_head einbinden, sodass sie für alle js-Dateien wie folgt verfügbar sind:

function my_js_variables(){ ?>
      <script type="text/javascript">
        var ajaxurl = '<?php echo admin_url( "admin-ajax.php" ); ?>';
        var ajaxnonce = '<?php echo wp_create_nonce( "itr_ajax_nonce" ); ?>';
      </script><?php
}
add_action ( 'wp_head', 'my_js_variables' )

Wie von @Weston Ruter vorgeschlagen, können Sie die Variablen auch json-codieren:

add_action ( 'wp_head', 'my_js_variables' );
function my_js_variables(){ ?>
  <script type="text/javascript">
    var ajaxurl = <?php echo json_encode( admin_url( "admin-ajax.php" ) ); ?>;      
    var ajaxnonce = <?php echo json_encode( wp_create_nonce( "itr_ajax_nonce" ) ); ?>;
    var myarray = <?php echo json_encode( array( 
         'foo' => 'bar',
         'available' => TRUE,
         'ship' => array( 1, 2, 3, ),
       ) ); ?>
  </script><?php
}
22
sven

Sie können alle gewünschten Daten in den Hook wp_head exportieren, wie die obigen Antworten zeigen. Sie sollten jedoch json_encode verwenden, um die PHP -Daten für den Export nach JS vorzubereiten, anstatt zu versuchen, Rohwerte in JS-Literale einzubetten:

function my_js_variables(){
    ?>
    <script>
    var ajaxurl = <?php echo json_encode( admin_url( "admin-ajax.php" ) ) ?>;
    var ajaxnonce = <?php echo json_encode( wp_create_nonce( "itr_ajax_nonce" ) ) ?>;
    var myarray = <?php echo json_encode( array( 
        'food' => 'bard',
        'bard' => false,
        'quux' => array( 1, 2, 3, ),
    ) ) ?>;
    </script>
    <?php
}
add_action ( 'wp_head', 'my_js_variables' )

Die Verwendung von json_encode macht es einfacher für Sie und verhindert versehentliche Syntaxfehler, wenn Ihre Zeichenfolge Anführungszeichen enthält. Noch wichtiger ist, dass die Verwendung von json_encode XSS-Angriffen vorbeugt.

12
Weston Ruter

Am Ende habe ich das getan. Es funktioniert jetzt !! Vielen Dank @ dot1

function itr_global_js_vars() {
    $ajax_url = 'var itrajaxobject = {"itrajaxurl":"'. admin_url( 'admin-ajax.php' ) .'", "itrajaxnonce":"'. wp_create_nonce( 'itr_ajax_nonce' ) .'"};';
    echo "<script type='text/javascript'>\n";
    echo "/* <![CDATA[ */\n";
    echo $ajax_url;
    echo "\n/* ]]> */\n";
    echo "</script>\n";
}
add_action( 'wp_head', 'itr_global_js_vars' );
1
Subharanjan