这个add_post_metadata
和update_post_metadata
过滤器仅用于过滤是否应保存(添加/更新)特定元数据。默认值(的$check
) 是一个null
, 如果您返回的不是null
(即。!== null
), 元数据将不会保存(到数据库中)。
但是add_metadata()
功能(由使用add_post_meta()
) 以及update_metadata()
功能(由使用update_post_meta()
), 两者都使用sanitize_meta()
用于清理meta值(虽然清理是通过过滤器完成的,而不是通过函数本身),以及Codex 表示:
应用可挂接的筛选器,以对特定元数据类型和键执行特定的清理过程。不会自行清理任何东西。必须连接自定义过滤器才能完成此工作。过滤器挂钩标记的形式为“sanitize_{$meta_type}_meta_{$meta_key}
“。
所以在你的情况下$meta_type
可能是post
, 和$meta_key
可能是mycustomkey
, 您可以这样过滤值:
add_filter( \'sanitize_post_meta_mycustomkey\', function( $value ){
return \'new_value\';
} );
同时检查此项
example.
缺点不幸的是sanitize_meta()
不会将“对象”(例如post或user)ID传递给清理过滤器(即连接到sanitize_{$meta_type}_meta_{$meta_key}
).
有一种方法可以克服这一点,但这取决于您的代码/上下文,因此我无法解释“如何”。
更新实际上,有一个棘手的问题(或黑客?)解决方案,可与add_post_metadata
和update_post_metadata
过滤器。但我这里还没有包含代码,您可以在Pastebin.