我想为我的CPT创建几个注释自定义字段,并删除默认字段。
我将只有两个自定义字段,更确切地说是两个无线电输入。
这是我的代码:
function debate_comment_fields( $fields ) {
if( is_singular( \'debate\' ) ) {
$fields[\'url\'] = \'\';
$fields[\'author\'] = \'\';
$fields[\'email\'] = \'\';
$fields[\'first\'] = \'<p class="comment-form-first"><label for="first">\' .
__( \'HTML5\' ) .
\'</label>\' .
\'<input id="first" name="category" type="radio" value="\'.get_post_meta($post->ID, \'agree\', true).\'" /></p>\';
$fields[\'second\'] = \'<p class="comment-form-second"><label for="second">\' .
__( \'FLASH\' ) .
\'</label>\' .
\'<input id="second" name="category" type="radio" value="\'.get_post_meta($post->ID, \'disagree\', true).\'" /></p>\';
return $fields;
}
}
add_filter(\'comment_form_default_fields\',\'debate_comment_fields\');
问题是,在我默认的博客帖子上,url、author和email字段也被删除了,我希望在那里看到它们,因为我添加了
if( is_singular( \'debate\' ) ) {
如果我在CPT中提交评论,我会得到:ERROR: please fill the required fields (name, email).
看来它还是在问我那些领域。
我的代码怎么了?谢谢
最合适的回答,由SO网友:Chip Bennett 整理而成
关于第一个问题的非CPT评论:如果您的条件为false,您将不会返回任何内容。要简化代码,请执行以下操作:
function debate_comment_fields( $fields ) {
// If conditional is true
if( is_singular( \'debate\' ) ) {
// Do some stuff to $fields
// Return $fields
return $fields;
}
// If conditional is not true?
}
add_filter(\'comment_form_default_fields\',\'debate_comment_fields\');
您需要返回默认值
$fields
如果您的条件不为true:
function debate_comment_fields( $fields ) {
// If conditional is true
if( is_singular( \'debate\' ) ) {
// Do some stuff to $fields
// Return $fields
return $fields;
}
// If conditional is not true?
return $fields;
}
add_filter(\'comment_form_default_fields\',\'debate_comment_fields\');
这将确保为非CPT post注释返回默认字段。
您遇到的第二个问题是,对于您的CPT评论,评论表单没有发送姓名和电子邮件,这是必需的。有两种解决方案:
- Disable name/email as required fields globally
- Filter
preprocess_comment
允许CPT post注释绕过所需的字段检查