后元字段的索引[0]是多少?


10

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

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

echo $custom['price'][0];

它们是否用于索引/引用页面上的输入?如果可以,为什么它们相同?您能否让我知道为什么以及何时使用它们?

Answers:


17

每个发布元键可以具有多个值。因此,默认情况下,您将这些值作为数组获取;第一个条目(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_keys,并且每行meta_key可以有多个meta_values。

现在,让我们获取帖子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并将值作为字符串返回。

这是最易读的选项,用它来编写易于理解的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.