MetaBox在清空后不保存

时间:2016-10-05 作者:Trenton Moore

所以我创建了一些这样的自定义元数据库,它们都是这样操作的。在我第一次将任何内容放入它们时,它们都可以完美地工作,之后的任何时候我都可以编辑它们,但如果它们被清空,它们将不再更新。

add_action( \'admin_menu\', \'TFP_meta\' );
    add_action( \'save_post\', \'save_TFP_meta\', 10, 2 );

    function TFP_meta() {
        add_meta_box( \'TFP-meta-box\', \'Toll Free\', \'TFP_meta_box\', \'page\', \'side\', \'low\' );
    }

    function TFP_meta_box( $object, $box ) { ?>
        <p>
            <br />
            <textarea name="TFP" id="TFP" cols="60" rows="4" tabindex="30" style="width: 97%;"><?php echo wp_specialchars( get_post_meta( $object->ID, \'TFP\', true ), 1 ); ?></textarea>
            <input type="hidden" name="TFP_meta_box_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
            <script type="text/javascript">edCanvas = document.getElementById(\'TFP\');edInsertContent = null;</script>
        </p>
    <?php }

    function save_TFP_meta( $post_id, $post ) {

        if ( !wp_verify_nonce( $_POST[\'TFP_meta_box_nonce\'], plugin_basename( __FILE__ ) ) )
            return $post_id;

        if ( !current_user_can( \'edit_post\', $post_id ) )
            return $post_id;

        $TFP_meta_value = get_post_meta( $post_id, \'TFP\', true );
        $new_TFP_meta_value = stripslashes( $_POST[\'TFP\'] );

        if ( $new_TFP_meta_value && \'\' == $TFP_meta_value )
            add_post_meta( $post_id, \'TFP\', $new_TFP_meta_value, true );

        elseif ( $new_TFP_meta_value != $TFP_meta_value )
            update_post_meta( $post_id, \'TFP\', $new_TFP_meta_value );

        elseif ( \'\' == $new_TFP_meta_value && $TFP_meta_value )
            delete_post_meta( $post_id, \'TFP\', $TFP_meta_value );
    }
这可能是什么原因造成的?看起来可能只是一些小错误,或者我的保存代码中有什么不正确的地方?

1 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

以下是的更新版本save_TFP_meta(), 修改了保存逻辑。它修复了元数据清空后无法保存的问题。

function save_TFP_meta( $post_id, $post ) {

    if ( ! wp_verify_nonce( $_POST[\'TFP_meta_box_nonce\'], plugin_basename( __FILE__ ) ) )
            return $post_id;

    if ( ! current_user_can( \'edit_post\', $post_id ) )
            return $post_id;

    $TFP_meta_value = get_post_meta( $post_id, \'TFP\', true );
    $new_TFP_meta_value = stripslashes( $_POST[\'TFP\'] );

    if ( false !== $TFP_meta_value && \'\' == $new_TFP_meta_value ) {
        delete_post_meta( $post_id, \'TFP\', $TFP_meta_value );
    } else {
        update_post_meta( $post_id, \'TFP\', $new_TFP_meta_value );
    }
}

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {