我在自定义帖子类型中有一些文本字段,我首先填写这些字段,但需要在将来更新帖子时删除。当我删除字段中的文本并保存帖子时,我删除的文本会返回!如果我输入一个空格,它会保存OK。有人知道我怎么解决这个问题吗?
以下是显示和保存字段数据的自定义帖子类型的代码部分(没有发布自定义帖子类型初始化代码,因为它来自codex):
function book_info()
{
global $post;
$custom = get_post_custom($post->ID);
$book_title = $custom["book_title"][0];
... (more field variables) ...
?>
<p><label>Book Title:</label><br />
<input class="medium" name="book_title" value="<?php echo esc_html($book_title); ?>" /></p>
... (more field display blocks) ...
<?php
}
add_action(\'save_post\', \'save_book\');
function save_book($post_id)
{
// Verify this came from our screen with proper authorization.
if ( !wp_verify_nonce( $_POST[\'book_info_noncename\'], \'book_info\'.$post_id )) {
return $post_id;
}
// Determine whether this is an autosave routine. If so, our form has not been submitted and we don\'t want to do anything.
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )
return $post_id;
// Check permissions
if ( !current_user_can( \'edit_post\', $post_id ) )
return $post_id;
// Now that authentication is complete, find and save the data.
$post = get_post($post_id);
if ($post->post_type == \'book\') {
if (isset($_POST["book_title"]) && $_POST["book_title"] <> \'\') update_post_meta($post->ID, "book_title", $_POST["book_title"]);
... (more field save statements) ...
return($_POST[\'book\']);
}
return $post_id;
}
如果我在“book\\u title”字段中输入文本并保存,它就会工作。如果随后删除该文本并保存,则当单击保存后编辑帖子屏幕刷新时,该文本仍然存在。如果删除该文本并将其替换为空格字符,则会保存。我需要能够从字段中删除文本,而不必将其替换为空格字符。有没有想过如何做到这一点?
最合适的回答,由SO网友:Boone Gorges 整理而成
有问题的一行是:
if (isset($_POST["book_title"]) && $_POST["book_title"] <> \'\') update_post_meta($post->ID, "book_title", $_POST["book_title"]);
该逻辑表示:如果提交的表单包含一个名为“book\\u title”的字段,并且“book\\u title”字段的内容不等于空字符串,则保存它。在您的情况下,应满足第一个条件(带有“文本”类型的HTML输入字段将出现在
$_POST
即使它们是空的,也是全局的),但第二个是失败的。将其更改为:
if ( isset( $_POST["book_title"] ) )
update_post_meta($post->ID, "book_title", $_POST["book_title"]);