一个想法是将所有附加数据保存为user meta, 这将允许您在登录用户发布评论时检索它,并将其副本存储在评论旁边,就像对未登录用户一样。当然,这取决于数据的类型,以及每个注释必须具有唯一性的程度。
另一种方法可能是comment_form_top 操作,由调用comment_template() 打印评论表单之前。假设您已使用comment_form_default_fields 过滤器,然后执行如下操作:
function get_extra_fields() {
return array(\'age\' => \'<p class="comment-form-age"><label for="age">\' . __( \'Age\' ) . \'</label>\' .
\'<input id="age" name="age" type="text" size="30"\' . \'\' . \' /></p>\');
}
function add_comment_fields($fields) {
$fields = array_merge($fields, get_extra_fields());
return $fields;
}
add_filter(\'comment_form_default_fields\',\'add_comment_fields\');
function add_comment_meta_values($comment_id) {
if(isset($_POST[\'age\'])) {
$age = wp_filter_nohtml_kses($_POST[\'age\']);
add_comment_meta($comment_id, \'age\', $age, false);
}
}
add_action (\'comment_post\', \'add_comment_meta_values\', 1);
function add_comment_fields_logged_in() {
if (!is_user_logged_in())
return;
$fields = get_extra_fields();
foreach ( $fields as $name => $field ) {
echo apply_filters( "comment_form_field_{$name}", $field ) . "\\n";
}
}
add_filter(\'comment_form_logged_in_after\', \'add_comment_fields_logged_in\');
您可能还需要进行一些检查,以验证表单等提交了所有必需的数据,但这可能也适用于未登录的用户。