所以我创建了一些这样的自定义元数据库,它们都是这样操作的。在我第一次将任何内容放入它们时,它们都可以完美地工作,之后的任何时候我都可以编辑它们,但如果它们被清空,它们将不再更新。
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 );
}
这可能是什么原因造成的?看起来可能只是一些小错误,或者我的保存代码中有什么不正确的地方?
最合适的回答,由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 );
}
}