为什么`ADD_THEME_SUPPORT(‘HTML5’,ARRAY(‘COMMENT-FORM’)`禁用客户端验证?

时间:2016-12-27 作者:kimbaudi

为了将HTML5标记用于注释表单,我将以下代码片段添加到functions.php:

add_theme_support( \'html5\', array( \'comment-form\' ) );
但是,它会在表单提交时禁用客户端验证,我会被重定向到错误页面:

Error page redirect

现在,如果我删除add_theme_support( \'html5\', array( \'comment-form\' ) ); 然后提交评论表,我得到客户端验证:

Client side validation

有人能解释为什么会这样吗?是虫子吗?或预期的行为?

我目前正在使用WordPress 4.7。

2 个回复
SO网友:Frank P. Walentynowicz

不,这不是一个bug。这就是core处理它的方式。如果你调查/wp-includes/comment-template.php, 你会注意到<form> 元素,isnovalidate 添加属性时current_theme_supports( \'html5\', \'comment-form\' ) 是真的。但在注释表单中还有其他html元素,它们受主题选择的html5支持的影响。例如:电子邮件的输入字段(type="email" - html5,type="text" - xhtml),以及url(type="url" - html5,type="text" - xhtml)。

我不建议删除对html5的主题支持。WordPress现在用<!DOCTYPE html>, 也就是说,HTML5。如果我们删除了支持,我们的文档将无法验证为正确的XTML5。

那么,如何应对这种冒犯novalidate 属性简单的jQuery脚本将修复它。

创建文件removenovalidate.js 并在其中输入以下代码:

jQuery( document ).ready(function($) {
    $(\'#commentform\').removeAttr(\'novalidate\');
});
将此文件保存到主题文件夹中。将下面的代码添加到主题functions.php:

function fpw_enqueue_scripts() {
    if ( is_single() ) { 
        wp_register_script( \'fpw_remove_novalidate\', get_stylesheet_directory_uri() . \'/removenovalidate.js\', array( \'jquery\' ), false, true );
        wp_enqueue_script( \'fpw_remove_novalidate\' );
    }
}
add_action(\'wp_enqueue_scripts\', \'fpw_enqueue_scripts\', 10 );
全部完成。您的评论表单将立即生效。

SO网友:Hugo

您可以删除novalidate 具有以下简单Javascript的属性:

<script type="text/javascript">
    var commentForm = document.getElementById(\'commentform\'); 
    commentForm.removeAttribute(\'novalidate\');
</script>
不需要jQuery。

您可以包含以下代码,以便仅在帖子上运行脚本:

页脚。php

<?php if( is_singular() ) : ?>
    <script type="text/javascript">
        var commentForm = document.getElementById(\'commentform\');
        commentForm.removeAttribute(\'novalidate\');
    </script>
<?php endif; ?>

相关推荐

如何使用ADD_THEME_SUPPORT(‘HTML5’)?

我想知道add_theme_support() 函数可以工作,但在Html5的部分,我尝试将其与gallery一起使用,我注意到它的标记已经更改,下面是我所做的add_theme_support( \'html5\', array(\'gallery\') ); 但对于其他类似搜索表单或评论表单的表单add_theme_support( \'html5\', array( \'comment-form\',\'search-form\',\'gallery\', \'caption\' ) );