问题描述

尝试通过测试来提高我的 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 内部构件,我们暂时忽略。请注意,尽管只有一个值,我们也可以将这些值设置为数组。 colorage 是所有 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。