当前浏览:首页 / WordPress钩子 / update_{$meta_type}_metadata

apply_filters( "update_{$meta_type}_metadata", null|bool $check, int $object_id, string $meta_key, mixed $meta_value, mixed $prev_value )

短路正要更新的特定类型的meta数据

metamore...

metadatamore...

typemore...

updatemore...


描述

挂钩名称的动态部分$meta_type指的是meta对象类型(post、comment、term、user或任何其他具有相关meta表的类型)。
返回非空值将有效地“短路”该函数。

可能的钩子名称包括:

  • update_post_metadata
  • update_comment_metadata
  • update_term_metadata
  • update_user_metadata

参数

$checknull|bool
是否允许更新给定类型的meta数据。
$object_idint
meta数据关联的对象ID。
$meta_keystring
meta数据键。
$meta_valuemixed
meta数据值。如果非标量,则必须是可序列化的。
$prev_valuemixed
更新前要检查的上一个值。
如果已指定,则仅使用此值更新现有meta数据条目。否则,更新所有条目。

更多信息

  • 此过滤器在meta数据更新之前应用;它允许通过返回非空值来短路特定类型meta数据的更新。
  • 钩子的动态部分$meta_type引用meta对象类型。例如,如果更新了“user”的meta数据,则钩子将为“update_user_metadata”。
  • 如果要将数据保存到数据库,则过滤器必须返回null值($check的值)。如果它返回任何其他内容,“update_metadata”函数(因此“update_{$meta_type}_metadata”过滤器)将返回过滤器回调返回的内容。


源码

查看源码 官方文档


更新日志

版本描述
3.1.0开始引入

使用示例

  • 示例1

    从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
    }
  • 示例2

    与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 );