我希望只有在嵌入了一个表单(用短代码和php编写)时才能将某些JavaScript排入队列。
是否有嵌入表单时触发的Gravity Forms的动作挂钩?然后我可以做这样的事情。
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' ) ) );
});
});
如果没有这样的钩子,是否有另一种(非hacky)存档方式?
答案 0 :(得分:1)
您正在寻找gform_enqueue_scripts。它传递$form
对象,以便您确定是否应为给定表单加载脚本。
答案 1 :(得分:0)
我在文档中找到了这个例子。
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 );
}
这个例子的问题是我不喜欢用我的PHP文件编写的JS,add_init_script()
函数需要一个带JS作为参数的字符串。
我可以使用file_get_contents()
从文件中获取JS,但之后我将无法本地化脚本以注入AJAX网址。
我现在在问题中使用钩子,它完美无缺。
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' ) ) );
});
});