当前浏览:首页 / WordPress函数 / delete_metadata()

delete_metadata( string $meta_type, int $object_id, string $meta_key, mixed $meta_value = '', bool $delete_all = false ): bool

删除指定对象的元数据

deletemore...

metadatamore...


参数

$meta_typestring必填
对象元数据的类型为。接受'post''comment''term''user'或任何其他具有关联元表的对象类型。
$object_idint必填
对象元数据的ID。
$meta_keystring必填
元数据键。
$meta_valuemixed可选
元数据值。如果非标量,则必须是可序列化的。
如果已指定,则仅删除具有此值的元数据条目。
否则,删除具有指定meta_key的所有条目。
通过nullfalse或空字符串跳过此检查。
(为了向后兼容,不能传递空字符串来删除值为空字符串的条目。)

默认:''

$delete_allbool可选
如果为true,则删除所有对象的匹配元数据条目,忽略指定的object_id。否则,只删除指定object_id的匹配元数据条目。

默认:false


返回

bool 成功删除时为true,失败时为false。


钩子

do_action( 'deleted_postmeta', string[] $meta_ids )

删除文章的元数据后立即触发。

do_action( "deleted_{$meta_type}_meta", string[] $meta_ids, int $object_id, string $meta_key, mixed $_meta_value )

删除特定类型的元数据后立即触发。

do_action( 'delete_postmeta', string[] $meta_ids )

在删除文章的元数据之前立即触发。

do_action( "delete_{$meta_type}_meta", string[] $meta_ids, int $object_id, string $meta_key, mixed $_meta_value )

在删除特定类型的元数据之前立即触发。

apply_filters( "delete_{$meta_type}_metadata", null|bool $delete, int $object_id, string $meta_key, mixed $meta_value, bool $delete_all )

删除特定类型的元数据时发生短路(short-circuits)。



源码

查看源码 官方文档


更新日志

版本描述
2.9.0开始引入

用户贡献的笔记

  • 贡献者:Michelle Blanchette

    使用此函数删除特定的键值对时,请非常小心。如前所述,为$meta_value提供一个空字符串将导致完全跳过检查,从而删除所有键!

    $meta_value…如果指定,则仅删除具有此值的元数据条目。否则,删除具有指定meta_key…的所有条目

    为避免意外删除所有键实例,请使用短路检查:

    $value_to_delete = My_Class::get_value(); // may return empty string
    if ( $value_to_delete != '' && delete_metadata( 'post', 27, 'key', $value_to_delete ) ) {
     // the key-value pair was safely deleted
    }
  • 贡献者:raoabid491
    /*
    		 * Remove all post meta data for Custom Post Type (CPT)
    		 * at the time of uninstall of plugin that created this CPT.
    		 * So that plugin do not leave behind any orphan post meta data
    		 * related to its CPT. 
    		 * 
    		 * You may place this code in uninstall.php file in your plugin root directory.
    		 */
    		$meta_type  = 'post';           // since we are deleting data for CPT 
    		$object_id  = 0;                // no need to put id of object since we are deleting all
    		$meta_key   = 'my_meta_key';    // Your target meta_key added using update_post_meta()
    		$meta_value = '';               // No need to check for value since we are deleting all
    		$delete_all = true;             // This is important to have TRUE to delete all post meta
    
    		// This will delete all post meta data having the specified key 
    		delete_metadata( $meta_type, $object_id, $meta_key, $meta_value, $delete_all );