使用WordPress函数add_metadata()为特定对象添加元数据
WordPress PHP 函数add_metadata ()为特定对象添加元数据。对象类型可以是“post”、“comment”、“term”、“user”,或任何其他具有关联元表的类型。为指定对象(帖子、评论、用户等)添加元数据(附加数据)。
WordPress 中的元数据是基本数据的补充数据。它们也称为元字段、任意字段、自定义字段。换句话说,元数据是数据库中扩展主表的附加表。这是元数据管理的基本功能。所有其他自定义字段功能均以此为基础。使用WordPress函数add_metadata()为特定对象添加元数据您还可以在数据库中创建自定义元数据表,并使用此函数在其中添加/删除数据(参见下面的示例)。
推荐:[最新版]WordPress SEO插件Rank Math Pro
add_metadata()基本语法
描述
为指定对象添加元数据
用法
add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique );
- $meta_type (字符串) – 元数据的对象类型。它接受“帖子”、“评论”、“术语”、“用户”或任何其他具有相关元表的对象类型。
- $object_id (int) – 元数据所属对象的 ID。
- $meta_key (字符串) – 元数据键。
- $meta_value (mixed) – 元数据值。如果它是非标量的,则必须是可序列化的。
- $unique (bool) – 这是可选的。如果设置为 true,则元数据键对于对象来说将是唯一的。如果对象已经有指定元数据键的值,则不会进行任何更改。默认值为 false。
推荐:[最新版]YITH WooCommerce Tab Manager Premium插件WordPress WooCommerce选项卡插件
add_metadata()函数
为指定对象添加元数据(源文件可参考这里)
function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique = false ) {
global $wpdb;
if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) ) {
return false;
}
$object_id = absint( $object_id );
if ( ! $object_id ) {
return false;
}
$table = _get_meta_table( $meta_type );
if ( ! $table ) {
return false;
}
$meta_subtype = get_object_subtype( $meta_type, $object_id );
$column = sanitize_key( $meta_type . '_id' );
// expected_slashed ($meta_key)
$meta_key = wp_unslash( $meta_key );
$meta_value = wp_unslash( $meta_value );
$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );
/**
* Short-circuits adding metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
* - `add_post_metadata`
* - `add_comment_metadata`
* - `add_term_metadata`
* - `add_user_metadata`
*
* @since 3.1.0
*
* @param null|bool $check Whether to allow adding metadata for the given type.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
* @param bool $unique Whether the specified meta key should be unique for the object.
*/
$check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique );
if ( null !== $check ) {
return $check;
}
if ( $unique && $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d",
$meta_key,
$object_id
)
) ) {
return false;
}
$_meta_value = $meta_value;
$meta_value = maybe_serialize( $meta_value );
/**
* Fires immediately before meta of a specific type is added.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
* - `add_post_meta`
* - `add_comment_meta`
* - `add_term_meta`
* - `add_user_meta`
*
* @since 3.1.0
*
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $_meta_value Metadata value.
*/
do_action( "add_{$meta_type}_meta", $object_id, $meta_key, $_meta_value );
$result = $wpdb->insert(
$table,
array(
$column => $object_id,
'meta_key' => $meta_key,
'meta_value' => $meta_value,
)
);
if ( ! $result ) {
return false;
}
$mid = (int) $wpdb->insert_id;
wp_cache_delete( $object_id, $meta_type . '_meta' );
/**
* Fires immediately after meta of a specific type is added.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
* - `added_post_meta`
* - `added_comment_meta`
* - `added_term_meta`
* - `added_user_meta`
*
* @since 2.9.0
*
* @param int $mid The meta ID after successful update.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $_meta_value Metadata value.
*/
do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );
return $mid;
}
推荐:Max Mega Menu插件教程WordPress添加超级菜单
如何使用add_metadata()
向帖子添加元数据
// This code adds a 'color' metadata to post with ID 123
add_metadata( 'post', 123, 'color', 'blue', true );
向用户添加元数据
// This code adds a 'hobby' metadata to a user with ID 55
add_metadata( 'user', 55, 'hobby', 'golf', false );
向术语添加元数据
// This code adds 'description' metadata to a term with ID 77
add_metadata( 'term', 77, 'description', 'This is a term description', true );
向评论添加元数据
// This code adds 'location' metadata to a comment with ID 88
add_metadata( 'comment', 88, 'location', 'Australia', true );
如果不唯一则更新元数据
// This code attempts to add 'color' metadata to post with ID 123, but since it's not unique, no change will be made
add_metadata( 'post', 123, 'color', 'green', true );
推荐:[最新版]Phlox Pro主题免费下载Elementor多功能主题
创建自定义元数据表
插件开发人员可能需要创建此类表。创建应在插件激活阶段使用register_activation_hook()函数进行。其他插件可以创建类似的表,因此请在创建表之前检查它是否存在。
global $wpdb;
$result = false;
// Create a table in the DB if it doesn't exist yet
$sql = sprintf(
'CREATE TABLE IF NOT EXISTS `%stermmeta` (
meta_id bigint(20) UNSIGNED NOT NULL auto_increment,
term_id bigint(20) UNSIGNED NOT NULL,
meta_key varchar(255),
meta_value longtext,
PRIMARY KEY (meta_id)
)',
$wpdb->prefix
);
$result = $wpdb->query( $sql );
创建表后,应将其注册到$wpdb对象中,以便通过$wpdb 类更轻松地使用它,对于注册,向$wpdb->termmeta
对象添加一个应包含表名称的属性(建议尽早执行此操作 — 在使用自定义函数之前):
global $wpdb;
$wpdb->termmeta = $wpdb->prefix.'termmeta';
现在,创建表后,您可以像这样添加数据:
add_metadata ( 'term' , $_GET [ 'tag_ID' ], 'gender' , 'M' , true );
add_metadata ( 'term' , $_GET [ 'tag_ID' ], 'age' , '29' , true );
add_metadata ( 'term' , $_GET [ 'tag_ID' ], 'favourite_colour' , 'Green' , true );
add_metadata( 'comment', 45, 'vocation', 'Builder', true );
推荐:AliPay WordPress WooCommerce免费支付宝网关接口插件教程