我正在我的WordPress主题中创建一个自定义模板,因为我的模板是一个完全不同于我的活动主题的模板,模板有自己的标题&页脚和内部我分别正确地声明了wp_head();
和wp_footer();
。
在我的模板代码中,我尝试使用do_shortcode显示重力形式,但没有显示任何表单。当我检查该区域时,我可以看到表单代码,但style="display:none"
div中添加了.gform_wrapper
。
再补充一点,重力表单在我的网站的其余部分(使用活动主题的所有页面/帖子)中都能正常运行,我的自定义模板上只有问题。
非常感谢任何建议。
由于
答案 0 :(得分:21)
虽然这是一个老问题,但在我搜索这个问题时它仍然首先出现,所以我添加了我的解决方案,以防其他人也在搜索。如果您的主题通过在functions.php中包含以下一行或多行代码将脚本移动到页脚(通常是出于性能原因而推荐):
remove_action('wp_head', 'wp_print_scripts');
remove_action('wp_head', 'wp_print_head_scripts', 9);
add_action('wp_footer', 'wp_print_scripts', 5);
add_action('wp_footer', 'wp_print_head_scripts', 5);
您还需要将Gravity Forms脚本移动到页脚,因此它们会在jQuery之后调用。您可以通过将以下代码添加到主题的functions.php文件中来完成此操作:
add_filter('gform_init_scripts_footer', 'init_scripts');
function init_scripts() {
return true;
}
答案 1 :(得分:5)
这是因为您在表单上使用了条件逻辑。无论何时出现条件逻辑,整个表单都设置为display:none;然后javascript用于仅显示应显示的字段。
然而,这需要Gravity Forms能够使用内置入队函数的WordPress输出必要的Javascript ...它会在您的页脚中输出Javascript。
您的主题可能没有在您的主题的footer.php文件中调用此函数:
<? php wp_footer(); ?>
这个函数调用,所有主题应该具有(但很多人忘记包含),使插件能够动态地在主题的页脚中输出代码。如果它不存在,主题就无法输出必要的代码。
这很可能是您的表单无法正常显示的原因。
答案 2 :(得分:2)
我终于开始工作了。
要使条件逻辑起作用,必须取消注册WordPress附带的jQuery,必须在头文件中加载1.8.3并且gravityforms.min.js,conditional_logic.min.js和jquery.maskedinput.min.js必须是在页脚中加载:
<?php
function modify_jquery_version() {
if (!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery',
'https://code.jquery.com/jquery-1.8.3.min.js', false, '1.8.3');
wp_register_script('migrate',
'https://code.jquery.com/jquery-migrate-1.4.1.min.js', false, '1.4.1');
wp_enqueue_script('jquery');
wp_enqueue_script('migrate');
}
}
add_action('wp_enqueue_scripts', 'modify_jquery_version');
function footer_load() {
if (!is_admin()) {
wp_enqueue_script('gravity','/wp-content/plugins/gravityforms/js/gravityforms.min.js','','',true);
wp_enqueue_script('conditional','/wp-content/plugins/gravityforms/js/conditional_logic.min.js','','',true);
wp_enqueue_script('masked','/wpcontent/plugins/gravityforms/js/jquery.maskedinput.min.js','','',true);
}
}
add_action('wp_enqueue_scripts', 'footer_load');
?>
答案 3 :(得分:1)
我的WP主题是调用旧版本的jQuery(由Google托管),这导致display:none属性应用于我的Gravity Forms。我将enqueue脚本更新为最新版本的jQuery,并解决了这个问题。
答案 4 :(得分:1)
我也有这个问题,实际的解决方案是添加
gravity_form_enqueue_scripts($form_id)
到你的header.php文件。
来自Gravity表格支持文档本身:https://www.gravityhelp.com/documentation/article/embedding-a-form/#enqueue-scripts-and-styles
答案 5 :(得分:0)
我能够解决我的问题,只需停用名为Autoptimize的插件,该插件可优化连接CSS和JavaScript代码并压缩它的网站。
一旦找到它就非常明显。
答案 6 :(得分:0)
我刚才遇到了这个问题。
两个问题:这个旧主题使用的是jQuery 1.5.1,它捆绑的所有插件都是为旧的jQuery编写的。 Gravity Forms中的条件逻辑由于旧的jQuery版本而无法工作,因为我重命名了一个条件逻辑字段。
删除/修复一些不正确的条件逻辑下拉列表,并在网站上升级jQuery版本后,事情又开始起作用了。
答案 7 :(得分:0)
此问题可能是由页面上的任何其他脚本引发错误引起的。检查控制台以确保没有损坏的脚本
答案 8 :(得分:0)
对我来说,原因是FireFox中的控制台错误与:
有关jQuery(document).bind('gform_post_render', function(ev){
console.log(event, ev);
});
答案 9 :(得分:0)
就我而言,我认为原因是: 我将Gravity短代码放入了(也许它检测到并在其iframe中插入了“显示:无”?)
Dim arrayVar(1 to 4) As String
arrayVar(1)="hi "
arrayVar(2)="there "
arrayVar(3)="what's "
arrayVar(4)="up."
For i=1 to 4
output=output & arrayVar(i)
Next
MsgBox(output)
框架代码:
<div id="layer_2" style="display: none">
[gravityform id=123 title=false ajax=true]
</div>
由于我从div中删除了“ display:none”,因此Gfrom可以正常工作。比将脚本添加到页面:
<iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_16' id='gform_ajax_frame_16'></iframe>
但是!即使没有上面的JS代码,Gform也可以在“ iframe style = display:none”下正常工作。 真正的原因是:缺少一个“
jQuery(document).ready(function() { jQuery("#_layer_2").attr("style", "display: none"); });
”。
答案 10 :(得分:0)
作为临时修复,我将此添加到 <theme_dir>/footer.php
,就在 </body></html>
之前:
<script>
jQuery('.gform_wrapper').show();
</script>
这将告诉 jQuery 显示所有带有 .gform_wrapper
类的 div。
我已经尝试在此处移动 wp_footer();
以及所有其他建议。和其他网站。没有任何效果。我还尝试禁用缓存、清除缓存、删除插件等。没有 JS 错误。未显示任何表单。
我注意到的一件事是只有在满足两个条件时才会出现问题:
如果两者中的任何一个都不存在,则表单加载正常。
我会在找出发生这种情况的原因后在此处添加更多信息。
主要问题是 DOMContentLoaded
没有被触发。如果不是所有的 http 请求都完成(比如待处理的 css、js、图像等),就会发生这种情况。以下代码(从 https://stackoverflow.com/a/49724894/1582649 借用)强制事件并显示表单。
window.document.dispatchEvent(new Event("DOMContentLoaded", {
bubbles: true,
cancelable: true
}));
我仍然不知道为什么会发生这种情况,因为控制台中没有显示待处理的请求。一切似乎都在正确加载。我试图将整个站点复制到另一台服务器,它在那里工作。这让我认为这与主机提供商有关。也许某种缓存。
现在,我将把那段代码放在 <theme>/footer.php
的末尾。
答案 11 :(得分:0)
就我而言,解决方案非常简单:我只是停用了 Enable jQuery Migrate Helper 插件。就是这样。
答案 12 :(得分:-1)
您是否尝试从style="display:none"
div中删除.gform_wrapper
?或者改成它
style="display:block"
答案 13 :(得分:-1)
我不认为这会有所帮助,但也许可以试试这个:
.gform_wrapper{
display:block !important;
}
我知道内联样式会覆盖任何样式表,但!important
帮助我覆盖了一些插件样式。
还尝试在插件文件中搜索style="display:none"
。使用Textwrangler或其他编辑器,您可以在其中搜索多个文件。这对编辑主题和插件也有很大帮助。
答案 14 :(得分:-2)
是&#34;显示:无&#34;为.gform_wrapper类本身设置?然后只需在Gravity Forms的css文件中更改它。
但是,包装器可能具有ID或其他类,可以设置display:none。
最后但并非最不重要的是,包装器可能存在破坏的jQuery动画,这可能是它保持隐藏的原因。