Answers:
每个发布元键可以具有多个值。因此,默认情况下,您将这些值作为数组获取;第一个条目(0
)最旧。
get_post_custom()
获取所有元键及其值。您可以使用以下方法简化代码:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
当最后一个参数get_post_meta()
是TRUE
,WordPress会返回一个值:在后meta值的第一个条目给定键。
第一个调用get_post_meta()
将在后台获取并缓存该帖子ID的所有元值,因此以后的调用将不会导致其他数据库查询。
假设我们创建了一个名为的帖子元键,color
并为一个帖子填充了三个不同的值。然后我们用一个键做同样的事情age
。
add_action( 'wp_loaded', function() {
foreach ( array ( 'blue', 'red', 'yellow' ) as $color )
add_post_meta( 561, 'color', $color, FALSE );
foreach ( array ( '14', '40', '104' ) as $age )
add_post_meta( 561, 'age', $age, FALSE );
});
最后一个参数FALSE
告诉WordPress 不要使此元密钥唯一 -而是允许一个密钥具有多个值。
我们postmeta
表中的结果结构如下所示:
每行都有一个唯一的meta_id
,但每行post_id
可以有多个meta_key
s,并且每行meta_key
可以有多个meta_value
s。
现在,让我们获取帖子561的所有自定义值:
add_action( 'shutdown', function(){
$custom = get_post_custom( 561 );
print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});
结果:
array (
'_edit_last' =>
array (
0 => '1',
),
'_edit_lock' =>
array (
0 => '1367617428:1',
),
'color' =>
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
),
'age' =>
array (
0 => '14',
1 => '40',
2 => '104',
),
)
_edit_last
而且_edit_lock
是WordPress的内部工具,我们暂时将其忽略。请注意,尽管只有一个值,但我们也将这些值作为一个数组获得。
color
并且age
是与所有发布元值类似的数组。
$custom['color'][0]
是blue
。
现在,我们使用以下命令获取颜色get_post_meta()
:
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color' );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
结果:
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
)
在这里,我们仅获得一个元值。$color[0]
还是blue
。在后台,WordPress已经获取了所有自定义值,因此下一个命中项age
将从缓存中提供。
在性能方面get_post_custom()
和get_post_meta()
相等。
上一次尝试:使用get_post_meta()
作为单个值的颜色。
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
结果:blue
。
WordPress完成了您在代码中所做的事情:它获取了数组键0
并将值作为字符串返回。
这是最易读的选项,用它来编写易于理解的代码。