正如@fischi所指出的,删除空值应该是安全的,因为get_post_meta()
为不存在的和空的元键返回相同的值,除非您在一次获取所有元数据时以某种方式依赖于所设置的键。
WP 3.1引入了过滤器add_{$meta_type}_metadata
和update_{$meta_type}_metadata
可用于清除空值,甚至防止将其保存在数据库中:https://codex.wordpress.org/Plugin_API/Filter_Reference/update_(meta_type)_metadata
例如,您可以拦截并删除包含“my\\u prefix”的所有键的错误值,如下所示:
add_filter(\'update_post_metadata\', function($check, $object_id, $meta_key, $meta_value, $prev_value) {
if(strpos($meta_key, \'my_prefix\')) {
if(empty($meta_value)) {
delete_post_meta($object_id, $meta_key, $prev_value);
return true; //stop update
}
}
return null; //do update
}, 10, 5);
请注意,这不会清理任何现有记录。