Wordpress(バージョン4.5.3)を使用しており、コメントフォームにカスタムフィールドを追加しました。フィールドは、selectタグを使用するドロップダウンリストです。フィールドはちょうど良い形で表示され、オプションを選択することができ、そのオプションの値は適切に保存されます。Wordpressでコメントメタデータを編集できません
また、コメント編集ページ(/wordpress/wp-admin/comment.php?action=editcomment)でカスタムフィールドを編集するためのコードも追加しました。私は、格納された値を取得し、適切な値を選択してドロップダウンリストを再作成することができます。
カスタムフィールドの編集値を保存するコードを追加しましたが、それは機能しません。コメント編集ページから、ドロップダウンから別の値を選択し、「更新」ボタンをクリックすると、新しく選択された値は保存されません。
私はfunction.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;
}
:ここではカスタムフィールドの編集した値を保存するためのコードです。コメント編集ページに戻ると、編集した値ではなく、カスタムフィールドの元の値が表示されます。
編集された値が保存されないのはなぜですか?