Search code examples
javascriptphpwordpressgravity-forms-plugin

Gravity Forms - Enqueue JS when form embedded?


I want to be able to only enqueue certain JavaScript when there is a form embedded (emedded with shortcode and php).

Is there an action hook for Gravity Forms that triggers when a form is embedded? Then I could do something like this.

add_action('some_gforms_hook', function() {
    add_action('wp_enqueue_scripts', function() {
        wp_enqueue_script( 'postcode', get_bloginfo('stylesheet_directory') . '/modules/Postcode/assets/js/postcode.js', array('jquery') );
        wp_localize_script( 'postcode', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
    });
});

If there is no such hook, is there another (non hacky) way of archiving what I want?


Solution

  • I found this example in the documentation.

    add_action( 'gform_register_init_scripts', 'gform_format_money' );
    function gform_format_money( $form ) {
    
        $script = '(function($){' .
            '$('.gf_money input').each(function(){' .
                '$(this).val(gformFormatMoney($(this).val()));' .
            '}).change(function(){' .
                '$(this).val(gformFormatMoney($(this).val()));' .
            '});' .
        '})(jQuery);';
    
        GFFormDisplay::add_init_script( $form['id'], 'format_money', GFFormDisplay::ON_PAGE_RENDER, $script );
    }
    

    The problem with this example is that I don't like the JS written in my PHP files and the add_init_script() function needs a string with JS as argument.

    I could use file_get_contents() to get the JS from the file but then I will not be able to localize the script for injecting the AJAX url.

    I now use the hook as in the question and it works perfect.

    add_action( 'gform_register_init_scripts', function() {
        add_action('wp_enqueue_scripts', function() {
            wp_enqueue_script( 'postcode', get_bloginfo('stylesheet_directory') . '/modules/Postcode/assets/js/postcode.js', array('jquery') );
            wp_localize_script( 'postcode', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
        });
    });