我宁愿将此作为评论发布到helgatheviking的帖子上,但因为我在这个SE网站上没有声誉,我正在写一篇新帖子。如果管理员觉得没有帮助,可以随意删除它。
Helga的示例非常好用,但您也应该知道,如果您设置了自定义保存处理程序,比如下面这样的内容,检查post屏幕中的元框并保存更新,删除空值,然后如果您不暂时暂停自定义保存处理程序,Helga的脚本将删除所有其他元。例如:
add_action(\'save_post\', \'etm\\save_custom_fields\');
function save_custom_fields( $postId ) {
//avoid accidental duplication
return; //remove this when not using helga\'s function anylonger
if( ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
|| ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) )
return;
//add your custom meta fields here
$fields = array( \'meta-key-1\', \'meta-key-2\', \'...\' );
foreach( $fields as $metaName ):
//keep a flag if it\'s been updated
$new = false;
//get the existing value
$old = get_post_meta( $postId, $metaName, true );
//update the flag with the new value
if ( isset( $_POST[ $metaName ] ) ) {
$new = $_POST[ $metaName ];
}
//add/update or delete the meta
if( $new && $new != $old ) {
update_post_meta( $postId, $metaName, $new, $old ); //also acts to add
} elseif( !$new ) {
delete_post_meta( $postId, $metaName, $old );
}
endforeach;
}
我刚才在一个开发网站上犯了这个错误。谢天谢地,我在运行Helga的脚本之前备份了数据库(它自己可以完美地工作)。但是,由于我可能不是唯一一个使用自定义元脚本/自定义保存处理的人,我认为这是一个重要的提醒。