Je suis coincé dans une situation étrange. J'essaie de passer la variable PHP dans JS par WordPress wp_localize_script et j'essaie de l'afficher dans console.log mais elle génère null. voici mon code dans functions.php

$conv = 1.36;
echo $conv;

add_action('wp_enqueue_scripts','cassets');
function cassets(){
  wp_enqueue_script("all-script",get_template_directory_uri().'/all-script.js',array('jquery'),'',true);
  $rate= array(
    'conv' => $conv,
  );
  wp_localize_script( 'all-script', 'rate', $rate);

}

Et dans all-script.js

var conv = rate.conv;
console.log(conv);

Dans la fenêtre de la console, il affiche null mais la valeur d'écho php est correcte.

Merci d'avance.

3
Roshan Kumar 12 mars 2019 à 20:23

2 réponses

Meilleure réponse

Vous utilisez votre variable $conv hors de portée. Jetez un œil à la documentation de la Variable Scope de PHP. Vous définissez $conv dans la portée globale, mais vous faites référence à une portée locale $conv dans votre fonction cassets().

Vous devez utiliser la fonction étendue $conv, soit en la définissant à l'intérieur, soit en la transmettant à la fonction en tant que variable globale ou en la transmettant en tant que Référence.

Voici quelques exemples:

Définition dans le périmètre :

add_action('wp_enqueue_scripts','cassets');
function cassets(){
    $conv = 1.36;

    wp_enqueue_script( 'all-script', get_template_directory_uri().'/all-script.js', array('jquery'), '', true );

    $rate = array(
        'conv' => $conv,
    );

    wp_localize_script( 'all-script', 'rate', $rate );
}

En le passant à la fonction en tant que variable globale :

$conv = 1.36;

add_action('wp_enqueue_scripts', 'cassets' );
function cassets(){
    global $conv;

    wp_enqueue_script( 'all-script', get_template_directory_uri().'/all-script.js', array('jquery'), '', true );

    $rate = array(
        'conv' => $conv,
    );

    wp_localize_script( 'all-script', 'rate', $rate );
}

En le passant via la clôture :

$conv = 1.36;

add_action('wp_enqueue_scripts', function() use($conv){
    wp_enqueue_script( 'all-script', get_template_directory_uri().'/all-script.js', array('jquery'), '', true );

    $rate = array(
        'conv' => $conv,
    );

    wp_localize_script( 'all-script', 'rate', $rate );
});
5
Xhynk 12 mars 2019 à 17:51

Votre problème est que vous avez défini $conv en dehors de votre fonction.

À l'intérieur de votre fonction $conv était indéfini. (Je pense que vous devriez également recevoir un avertissement de php).

Essaye ça:

add_action('wp_enqueue_scripts','cassets');
function cassets(){
  $conv = 1.36;
  wp_enqueue_script("all-script",get_template_directory_uri().'/all-script.js',array('jquery'),'',true);
  $rate= array(
    'conv' => $conv,
  );
  wp_localize_script( 'all-script', 'rate', $rate);

}
2
Sysix 12 mars 2019 à 17:39