您可以这样做:
$item->content_multiple = get_post_meta($item->ID, \'_menu_item_content_multiple\', true);
请注意如何设置的第三个参数
get_post_meta()
到
true
, 这意味着只返回一个值。
If you read the docs, 如果第三个参数是
false
, 您将获得
array 包含该元字段的所有值。
请记住,元字段可以是唯一的,也可以是多个。或者,它可以是唯一的序列化数据字符串。
实际上,您的代码似乎将select multiple中的所有值存储到一个元字段中。因此,在请求中获得一个数组,并将其作为元字段的单个值传递。当元字段的值是数组时,WordPressconverts it to a serialized string before it is stored in the database; 这是通过函数内部完成的maybe_serialize()
. 然后,当您尝试获取元字段的值时,如果它是一个序列化字符串,WordPress会将其传递给maybe_unserialize()
, 因此,序列化字符串将转换回数组:
让我们用一个通用示例进行解释。
这将是存储在数据库中的值数组:
$values = [ \'red\', \'yellow\', \'blue\', \'pink\' ];
如果元键为“color”,则有两个选项:
同一元密钥的多个条目
$values = [ \'red\', \'yellow\', \'blue\', \'pink\' ];
foreach( $values as $value ) {
// This method uses `add_post_meta()` instead of `update_post_meta()`
add_post_meta( $item_id, \'color\', $value );
}
现在,标识为
$item_id
将有多个条目用于
color
元键。然后,您可以使用
get_post_meta()
将第三个参数设置为
false
您将得到一个包含所有值的数组:
// You don\'t really need the set the third parameter
// because it is false vay default
$colors = get_post_meta( $item_id, \'color\' );
// $colors should an array with all the meta values for the color meta key
var_dump( $colors );
将数组存储在单个元条目中。在这种情况下,在将值数组存储到数据库中之前,先将其序列化:
$values = [ \'red\', \'yellow\', \'blue\', \'pink\' ];
// WordPress does this automatically when an array is passed as meta value
// $values = maybe_serialize( $values );
update_post_meta( $item_id, \'color\', $values );
现在,标识为
$item_id
将只有一个条目用于
color
元密钥;该值是表示原始数组的序列化字符串。然后,您可以使用
get_post_meta()
, 将第三个参数设置为true,因为只有一个条目,然后取消序列化字符串以获取数组:
$colors = get_post_meta( $item_id, \'color\', true );
// WordPress does this automatically when the meta value is a serialized array
// $colors = maybe_unserialize( $colors );
// $colors should be an array
var_dump( $colors );
您可以使用相同的方法来选择表单的倍数。
With only one entry for the meta key:
if( ! empty( $_REQUEST[\'menu-item-content-multiple\'][$menu_item_db_id] ) ) {
$meta_field_value = $_REQUEST[\'menu-item-content-multiple\'][$menu_item_db_id];
// $meta_field_value will be serialized automatically by WordPress
update_post_meta( $menu_item_db_id, \'_menu_item_content_multiple\', $meta_field_value );
}
然后,可以将值用作数组:
// The value returned by get_post_meta() is unserialized automatically by WordPress
$item->content_multiple = get_post_meta( $item->ID, \'_menu_item_content_multiple\', true );
With multiple entries:
这里的概念有点不同;您将使用相同的元键在数据库中创建多个条目,因此需要使用
add_post_meta()
而不是
update_post_meta()
以便为每个值添加新条目。
if( ! empty( $_REQUEST[\'menu-item-content-multiple\'][$menu_item_db_id] ) ) {
$values = $_REQUEST[ \'menu-item-content-multiple\' . $menu_item_db_id ];
foreach( $values as $value ) {
add_post_meta( $menu_item_db_id, \'_menu_item_content_multiple\', $value );
}
}
现在,您可以使用
get_post_meta()
将第三个参数设置为
false
(这是默认值,因此可以忽略):
$item->content_multiple = get_post_meta( $item->ID, \'_menu_item_content_multiple\', false );
这两个选项都可以,您必须决定哪一个更好地组织项目中的数据。
Side note: 您应该在使用输入数据之前进行一些santization,但我不知道您的要求,这里有一个示例:
array_map( \'sanitize_text_field\', wp_unslash( $_REQUEST[\'menu-item-content-multiple\'][$menu_item_db_id] ) );