Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

wp_localize_script not working

I have the following code in my theme functions.php but when I call console.log(pw_script_vars); the variable is undefined. What did I miss?

function mytheme_enqueue_scripts(){
    wp_enqueue_script( 'jquery' );

}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_scripts');

function pw_load_scripts() {

    wp_enqueue_script('pw-script');
    wp_localize_script('pw-script', 'pw_script_vars', array(
            'alert' => __('Hey! You have clicked the button!', 'pippin'),
            'message' => __('You have clicked the other button. Good job!', 'pippin')
        )
    );


}
add_action('wp_enqueue_scripts', 'pw_load_scripts');
like image 407
Sebastian Corneliu Vîrlan Avatar asked Apr 15 '13 08:04

Sebastian Corneliu Vîrlan


People also ask

What is the function of function Wp_localize_script ()?

This function localizes a registered script with data for a JavaScript variable. This lets you offer properly localized translations of any strings used in your script.


2 Answers

You didn't include any javascript file with your wp_enqueue_script.

function pw_load_scripts() {

    wp_enqueue_script('pw-script', get_template_directory_uri() . '/test.js');
     wp_localize_script('pw-script', 'pw_script_vars', array(
            'alert' => __('Hey! You have clicked the button!', 'pippin'),
            'message' => __('You have clicked the other button. Good job!', 'pippin')
        )
    );


}
add_action('wp_enqueue_scripts', 'pw_load_scripts');

Create an empty file called test.js in your theme directory and it will work.

If you then look at your source code you'll see:

<script type='text/javascript'>
/* <![CDATA[ */
var pw_script_vars = {"alert":"Hey! You have clicked the button!","message":"You have clicked the other button. Good job!"};
/* ]]> */
</script>

You can then type pw_script_vars.alert in your console to get the "Hey! You have clicked the button!" message.

like image 114
RRikesh Avatar answered Sep 22 '22 08:09

RRikesh


You could also try to localize jQuery without the need to create additional empty JS files.

    wp_localize_script('jquery', 'pw_script_vars', array(
        'alert' => __('Hey! You have clicked the button!', 'pippin'),
        'message' => __('You have clicked the other button. Good job!', 'pippin')
    )
);

It works like a charm for me. Hope it helps.

like image 31
Mujnoi Gyula Tamas Avatar answered Sep 22 '22 08:09

Mujnoi Gyula Tamas