帖子元字段的索引[0]是什么?

时间:2013-05-25 作者:Behseini

尝试通过测试和尝试来提高我的PHP知识!我对以下WordPress PHP代码中的[0]参数感到困惑

global $post;
$custom = get_post_custom($post->ID);
$price = $custom[\'price\'][0];
$coMake = $custom[\'coMake\'][0];

echo $custom[\'price\'][0];
它们是否用于索引/引用页面上的输入?如果是,为什么他们是一样的?!你能告诉我为什么以及何时使用它们吗?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

每个post元键可以有多个值。因此,默认情况下,可以将值作为数组获取;第一个条目(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将返回单个值:给定键的post meta值中的第一个条目。

第一次呼叫get_post_meta() 将获取和缓存all 该post ID的元数据在后台显示,因此以后的调用不会导致额外的数据库查询。

例如,我们创建一个名为color 并用三个不同的值填充one 邮递然后我们用钥匙做同样的事情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 表如下所示:

table

每行有一个唯一的meta_id, 但每个post_id 可以有多个meta_keys、 以及每个meta_key 可以有多个meta_values

现在,让我们获取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 meta值类似
$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 并以字符串形式返回值。

这是最具可读性的选项,可用于编写易于理解的代码。

结束

相关推荐

将Metabox日期月份编号转换为单词

我使用带有日期(日、月和年)的自定义metabox。问题是,当我尝试将日期数字转换为日期字时,例如10是10月。我使用此代码:function eventposttype_get_the_month_abbr($month) { global $wp_locale; for ( $i = 1; $i < 13; $i = $i +1 ) { if ( $i == $month ) $monthabbr = $wp