custom comment fields on CPT

时间:2013-11-12 作者:agis

我想为我的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).看来它还是在问我那些领域。

我的代码怎么了?谢谢

1 个回复
最合适的回答,由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评论,评论表单没有发送姓名和电子邮件,这是必需的。有两种解决方案:

  1. Disable name/email as required fields globally
  2. Filter preprocess_comment 允许CPT post注释绕过所需的字段检查

结束

相关推荐

在POST循环外部加载Comments.php模板

我正在通过ajax加载帖子,并使用$post = get_post( $post_ID );是否有方法加载注释。在我输出帖子后使用php模板?我尝试使用:global $withcomments; $withcomments = true; comments_template(); 但它不在循环中,因此它不加载模板。我正在尝试获取我的评论表单和任何当前的评论来显示,只是遇到了一些困难。任何帮助都将不胜感激!