我正在使用Wordpress(版本4.5.3)并在评论表单中添加了自定义字段。该字段是使用select标记的下拉列表。该字段在表单中显示得很好,我可以选择一个选项,该选项的值可以正确保存。
我还在编辑评论页面中添加了编辑自定义字段的代码(/wordpress/wp-admin/comment.php?action=editcomment)。我能够检索存储的值,然后重新选择下拉列表并选择适当的值。
我添加了代码来保存自定义字段的已编辑值,但这不起作用。当我从编辑评论页面中选择下拉列表中的其他值,然后单击“更新”按钮时,新选择的值不会被保存。
我正在添加代码以在functions.php中完成所有这些操作。这是将字段添加到表单并存储数据的代码:
// Add fields after default fields above the comment box, always visible
add_action( 'comment_form_logged_in_after', 'additional_fields' );
add_action( 'comment_form_after_fields', 'additional_fields' );
function additional_fields () {
echo '<p class="comment-form-area">'.
'<label for="region">' . __( 'Choose a <strong>region</strong>' ) . '<span class="required">* </span></label>'.
'<br /><select id="region" name="region">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
<option value="four">four</option>
</select></p>';
}
// Save the comment meta data along with comment
add_action( 'comment_post', 'save_comment_meta_data' );
function save_comment_meta_data( $comment_id ) {
if ( ( isset( $_POST['region'] ) ) && ( $_POST['region'] != '') )
$region = wp_filter_nohtml_kses($_POST['region']);
add_comment_meta( $comment_id, 'region', $region );
}
以下是将自定义字段添加到评论编辑页面的代码:
// Add an edit option to comment editing screen
add_action( 'add_meta_boxes_comment', 'extend_comment_add_meta_box' );
function extend_comment_add_meta_box() {
add_meta_box( 'title', __( 'Region field' ), 'extend_comment_meta_box', 'comment', 'normal', 'high' );
}
function extend_comment_meta_box ( $comment ) {
$_regions = array
("one",
"two",
"three",
"four");
$region = get_comment_meta( $comment->comment_ID, 'region', true );
?>
<p>
<label for="region"><?php _e( 'Region*' ); ?></label>
<p><select id="region" name="region">
<?php
for ($ix = 0; $ix < count($_regions); $ix++) {
echo '<option value="' . $_regions[$ix] . '"';
if ($region == $_regions[$ix]) {
echo ' selected';
}
echo '>' . $_regions[$ix] . '</option>';
}
?>
</select></p>
<?php
}
这一切似乎都运转良好。以下是保存自定义字段的已编辑值的代码:
// Update comment meta data from comment editing screen
add_action( 'edit_comment', 'extend_comment_edit_metafields' );
function extend_comment_edit_metafields( $comment_id ) {
if( ! isset( $_POST['extend_comment_update'] ) || ! wp_verify_nonce( $_POST['extend_comment_update'], 'extend_comment_update' ) ) return;
if ( ( isset( $_POST['region'] ) ) && ( $_POST['region'] != '') ) :
$region = wp_filter_nohtml_kses($_POST['region']);
update_comment_meta( $comment_id, 'region', $region );
else :
delete_comment_meta( $comment_id, 'region');
endif;
}
此代码不起作用。当我返回编辑注释页面时,我看到自定义字段的原始值,而不是编辑的值。
为什么不保存编辑后的值?
答案 0 :(得分:0)
函数extend_comment_edit_metafields()最初测试是否已设置nonce字段。如果没有调用update_comment_meta(),它就不会执行返回。要正常工作,应在extend_comment_meta_box()中设置nonce字段,如下所示:
wp_nonce_field( 'extend_comment_update', 'extend_comment_update', false );
对nonce字段的讨论在这里:https://codex.wordpress.org/Function_Reference/wp_nonce_field