问题描述
尝试通过测试来提高我的 PHP 知识,并尝试!我对以下 WordPress PHP 代码的 [0] 参数感到困惑
global $post;
$custom = get_post_custom($post->ID);
$price = $custom['price'][0];
$coMake = $custom['coMake'][0];
echo $custom['price'][0];
是否在页面上索引/引用输入?如果是这样,为什么他们是一样的?你能不能让我知道为什么和何时使用它们?
最佳解决方案
每个后期元键可以有多个值。所以你默认得到数组作为数组; 第一个条目 (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 将返回单个值:给定键的后期值中的第一个条目。
对 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
,每个 meta_key
都可以有多个 meta_value
。
现在我们来获取 post 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
是所有 post 元值之类的数组。 $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
,并将该值作为字符串返回。
这是最可读的选项,用它来编写易于理解的代码。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。