描述
挂钩名称的动态部分$meta_type
指的是meta对象类型(post、comment、term、user或任何其他具有相关meta表的类型)。
返回非空值将有效地“短路”该函数。
可能的钩子名称包括:
update_post_metadata
update_comment_metadata
update_term_metadata
update_user_metadata
参数
$check
null|bool-
是否允许更新给定类型的meta数据。
$object_id
int-
meta数据关联的对象ID。
$meta_key
string-
meta数据键。
$meta_value
mixed-
meta数据值。如果非标量,则必须是可序列化的。
$prev_value
mixed-
更新前要检查的上一个值。
如果已指定,则仅使用此值更新现有meta数据条目。否则,更新所有条目。
更多信息
- 此过滤器在meta数据更新之前应用;它允许通过返回非空值来短路特定类型meta数据的更新。
- 钩子的动态部分
$meta_type
引用meta对象类型。例如,如果更新了“user”的meta数据,则钩子将为“update_user_metadata
”。 - 如果要将数据保存到数据库,则过滤器必须返回
null
值($check
的值)。如果它返回任何其他内容,“update_metadata
”函数(因此“update_{$meta_type}_metadata
”过滤器)将返回过滤器回调返回的内容。
源码
更新日志
版本 | 描述 |
---|---|
3.1.0 | 开始引入 |
使用示例
从Codex迁移的示例:
下面的示例跳过使用键“foo”和空值保存meta数据。对于其他meta数据,请继续正常执行。
add_action( 'init', 'wpdocs_init' ); function wpdocs_init() { add_filter( 'update_user_metadata', 'wpdocs_update_foo', 10, 4 ); } function wpdocs_update_foo( $check, $object_id, $meta_key, $meta_value ) { if ( 'foo' == $meta_key && empty( $meta_value ) ) { return false; // this means: stop saving the value into the database } return $check; // this means: go on with the normal execution in meta.php }
与stevenlinx的示例类似,跳过将
foo
的空值保存到用户meta数据。注意,如果用户试图清除先前输入的数据,这可能会产生问题;如果值为空,则应该包括一个附加的钩子,该钩子从用户的meta数据中删除foo
键。add_filter( 'update_user_metadata', function( $check, $object_id, $meta_key, $meta_value ) { // Already short-circuited; bail. if ( null !== $check ) return $check; // Bail if not saving the 'foo' metadata. if ( 'foo' !== $meta_key ) return null; // If meta value is not empty, then we _want_ to save it. if ( ! empty( $meta_value ) ) return null; // Prevent saving empty value to user's 'foo' metadata. return false; }, 10, 4 );