自定义帖子类型元框文本输入字段在为空时不会保存

时间:2012-04-15 作者:Joe

我在自定义帖子类型中有一些文本字段,我首先填写这些字段,但需要在将来更新帖子时删除。当我删除字段中的文本并保存帖子时,我删除的文本会返回!如果我输入一个空格,它会保存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”字段中输入文本并保存,它就会工作。如果随后删除该文本并保存,则当单击保存后编辑帖子屏幕刷新时,该文本仍然存在。如果删除该文本并将其替换为空格字符,则会保存。我需要能够从字段中删除文本,而不必将其替换为空格字符。有没有想过如何做到这一点?

1 个回复
最合适的回答,由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"]);

结束

相关推荐

Metabox image upload value

我正在使用本教程中WP tuts的元框http://wp.tutsplus.com/tutorials/reusable-custom-meta-boxes-part-3-extra-fields/ 一切正常,但我不知道如何调用图像上传程序的值。在我的索引中。php我使用了此代码<?php $image_upload = get_post_meta($post->ID, $field[\'custom_image\'], true);?> <?php print_r($im