Wordpress Meta Box表格数据不保存
问题描述:
我的插件是关于将常见问题添加到您想要的页面。
Wordpress Meta Box表格数据不保存
- 我在'添加新问题'的元框中添加了一个表单。
当我在窗体中输入值时,窗体数据在数据库中确实保存在 中,但不保留或显示页面更新/发布时的窗体值(选定) 。
而是,窗体显示以前的非选定值(即使数据库中显示的选定值为 )。
<?php
function faq_manage_things($post)
{
global $post;
$post_id= $post->ID;
wp_nonce_field(basename(__FILE__),'faqs_questions_nonce');
$faq_stored_meta= get_post_meta($post->ID);
?>
<div class="wrap">
<p>
<label for="meta-select" class="prfx-row-title"><?php _e('Example Select Input', 'prfx-textdomain')?></label>
<select name="meta-select" id="meta-select">
<option value="select-one" <?php if (isset ($prfx_stored_meta['meta-select'])) selected($prfx_stored_meta['meta-select'][0], 'select-one'); ?>><?php _e('One', 'prfx-textdomain')?></option>';
<option value="select-two" <?php if (isset ($prfx_stored_meta['meta-select'])) selected($prfx_stored_meta['meta-select'][0], 'select-two'); ?>><?php _e('Two', 'prfx-textdomain')?></option>';
</select>
</p>
<!-- TEXT AREA -->
<p>
<label for="meta-textarea" class="prfx-row-title"><?php _e('Example Textarea Input', 'prfx-textdomain')?></label>
<textarea name="meta-textarea" id="meta-textarea"><?php if (isset ($prfx_stored_meta['meta-textarea'])) echo $prfx_stored_meta['meta-textarea'][0]; ?></textarea>
</p>
<!-- CHECKBOXES -->
<p>
<span class="prfx-row-title"><?php _e('Example Checkbox Input', 'prfx-textdomain')?></span>
<div class="prfx-row-content">
<label for="meta-checkbox">
<input type="checkbox" name="meta-checkbox" id="meta-checkbox" value="yes" <?php if (isset ($prfx_stored_meta['meta-checkbox'])) checked($prfx_stored_meta['meta-checkbox'][0], 'yes'); ?> /><?php _e('Checkbox label', 'prfx-textdomain')?>
</label>
<label for="meta-checkbox-two">
<input type="checkbox" name="meta-checkbox-two" id="meta-checkbox-two" value="yes" <?php if (isset ($prfx_stored_meta['meta-checkbox-two'])) checked($prfx_stored_meta['meta-checkbox-two'][0], 'yes'); ?> /><?php _e('Another checkbox', 'prfx-textdomain')?>
</label>
</div>
</p>
</div>
<?php
}
global $post;
function faq_meta_save($post_id) {
global $post;
$post_id= $post->ID;
$is_autosave = wp_is_post_autosave($post_id);
$is_revision = wp_is_post_revision($post_id);
$is_valid_nonce = (isset($_POST[ 'faqs_questions_nonce' ]) && wp_verify_nonce($_POST['faqs_questions_nonce'],basename(__FILE__)))? 'true' : 'false';
if ($is_autosave || $is_revision || !$is_valid_nonce)
{return;} //exit
if(isset($_POST[ 'meta-select' ]))
{ update_post_meta($post_id, 'meta-select', $_POST[ 'meta-select' ]); }
if(isset($_POST[ 'meta-textarea' ])) {
update_post_meta($post_id, 'meta-textarea', sanitize_text_field($_POST[ 'meta-textarea' ])); }
// Checks for input and saves
if(isset($_POST[ 'meta-checkbox' ])) {
update_post_meta($post_id, 'meta-checkbox', 'yes');}
else {
update_post_meta($post_id, 'meta-checkbox', ''); }
// Checks for input and saves
if(isset($_POST[ 'meta-checkbox-two' ])) {
update_post_meta($post_id, 'meta-checkbox-two', 'yes');}
else {
update_post_meta($post_id, 'meta-checkbox-two', ''); }
}
add_action('save_post','faq_meta_save');
答
你必须检查,如果你有在数据库中复制了相同的POST_ID meta_key。另外,我建议你在meta_key名称中使用下划线而不是连字符。试试这个代码post_id的meta_data被删除,然后添加新的值。
试试这个:
<?php
function faq_manage_things($post)
{
global $post;
$post_id= $post->ID;
wp_nonce_field(basename(__FILE__),'faqs_questions_nonce');
$faq_stored_meta= get_post_meta($post->ID);
?>
<div class="wrap">
<p>
<label for="meta-select" class="prfx-row-title"><?php _e('Example Select Input', 'prfx-textdomain')?></label>
<select name="meta-select" id="meta-select">
<option value="select-one" <?php if (isset ($prfx_stored_meta['meta_select'])) selected($prfx_stored_meta['meta_select'][0], 'select-one'); ?>><?php _e('One', 'prfx-textdomain')?></option>';
<option value="select-two" <?php if (isset ($prfx_stored_meta['meta_select'])) selected($prfx_stored_meta['meta_select'][0], 'select-two'); ?>><?php _e('Two', 'prfx-textdomain')?></option>';
</select>
</p>
<!-- TEXT AREA -->
<p>
<label for="meta-textarea" class="prfx-row-title"><?php _e('Example Textarea Input', 'prfx-textdomain')?></label>
<textarea name="meta-textarea" id="meta-textarea"><?php if (isset ($prfx_stored_meta['meta_textarea'])) echo $prfx_stored_meta['meta_textarea'][0]; ?></textarea>
</p>
<!-- CHECKBOXES -->
<p>
<span class="prfx-row-title"><?php _e('Example Checkbox Input', 'prfx-textdomain')?></span>
<div class="prfx-row-content">
<label for="meta-checkbox">
<input type="checkbox" name="meta-checkbox" id="meta-checkbox" value="yes" <?php if (isset ($prfx_stored_meta['meta_checkbox'])) checked($prfx_stored_meta['meta_checkbox'][0], 'yes'); ?> /><?php _e('Checkbox label', 'prfx-textdomain')?>
</label>
<label for="meta-checkbox-two">
<input type="checkbox" name="meta-checkbox-two" id="meta-checkbox-two" value="yes" <?php if (isset ($prfx_stored_meta['meta_checkbox_two'])) checked($prfx_stored_meta['meta_checkbox_two'][0], 'yes'); ?> /><?php _e('Another checkbox', 'prfx-textdomain')?>
</label>
</div>
</p>
</div>
<?php
}
global $post;
function faq_meta_save($post_id) {
global $post;
$post_id= $post->ID;
$is_autosave = wp_is_post_autosave($post_id);
$is_revision = wp_is_post_revision($post_id);
$is_valid_nonce = (isset($_POST[ 'faqs_questions_nonce' ]) && wp_verify_nonce($_POST['faqs_questions_nonce'],basename(__FILE__)))? 'true' : 'false';
if ($is_autosave || $is_revision || !$is_valid_nonce)
{return;} //exit
if(isset($_POST[ 'meta-select' ])) {
remove_post_meta($post_id, 'meta_select', $_POST[ 'meta-select' ]);
add_post_meta($post_id, 'meta_select', $_POST[ 'meta-select' ]);
}
if(isset($_POST[ 'meta-textarea' ])) {
remove_post_meta($post_id, 'meta_textarea', sanitize_text_field($_POST[ 'meta-textarea' ]));
add_post_meta($post_id, 'meta_textarea', sanitize_text_field($_POST[ 'meta-textarea' ]));
}
// Checks for input and saves
if(isset($_POST[ 'meta-checkbox' ])) {
remove_post_meta($post_id, 'meta_checkbox', 'yes');
add_post_meta($post_id, 'meta_checkbox', 'yes');
}
else {
remove_post_meta($post_id, 'meta_checkbox');
}
// Checks for input and saves
if(isset($_POST[ 'meta-checkbox-two' ])) {
remove_post_meta($post_id, 'meta_checkbox-two', 'yes');
add_post_meta($post_id, 'meta_checkbox-two', 'yes');
}
else {
remove_post_meta($post_id, 'meta_checkbox-two');
}
}
add_action('save_post','faq_meta_save');
的帮助以及感谢!但是这个小型*炸弹*并没有保存上面$ prfx_stored_meta的元值。所以一旦我做到了,它就完美无缺 – amna