Pouvons-nous en quelque sorte utiliser wp_localize_script () pour créer des variables globales js sans descripteur de script spécifique, accessibles à partir de tous les fichiers js, même si les scripts js ne sont pas mis en file d'attente correctement à l'aide de wp_enqueue_script?
C'est le code que j'utilise et qui crée varibale pour le gestionnaire 'ajaxscript', je ne peux donc pas accéder à l'objet 'ajaxobject' dans un fichier js qui est inclus dans le header.php directement par <script src="xxx" .... />
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' )
)
);
Au lieu d'utiliser wp_localize_script dans ce cas, vous pouvez accrocher vos variables js à wp_head pour qu'il soit disponible pour tous les fichiers js tels que:
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' )
Aussi, comme suggéré par @Weston Ruter, vous pouvez json encoder les variables:
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
}
Vous pouvez exporter toutes les données de votre choix dans le hook wp_head
, comme le montrent les réponses ci-dessus. Cependant, vous devez utiliser json_encode
pour préparer les données PHP en vue de leur exportation vers JS au lieu d'essayer d'incorporer des valeurs brutes dans des littéraux JS:
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' )
Utiliser json_encode
vous simplifie la tâche et évite les erreurs de syntaxe accidentelles si votre chaîne contient des guillemets. Plus important encore, utiliser json_encode
contrecarre les attaques XSS.
J'ai fini par faire ça. Ça fonctionne maintenant !! Merci @ 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' );