Each post meta key can have multiple values. So you get the values by default as an array; the first entry (`0`) is the newest.

`get_post_custom()` fetches all meta key with their values. You could simplify your code with:

    $price  = get_post_meta( $post->ID, 'price', TRUE );
    $comake = get_post_meta( $post->ID, 'coMake', TRUE );

When the last parameter for `get_post_meta()` is `TRUE`, WordPress will return a single value: the last entry in the post meta value for the given key.

The first call to `get_post_meta()` will fetch all meta values for that post ID, so later calls will not result in additional database queries.

### An example

Let’s say, we create a post meta key named `color` and fill it with three different values for **one** post. Then we do the same with a key `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 );
    });

The last parameter `FALSE` tells WordPress *not* to make this meta key *unique* – to allow multiple values for one key.

The resulting structure in our `postmeta` table will look like this:

![table][1]

Each row has a unique `meta_id`, but each `post_id` can have multiple `meta_key`s, and each `meta_key` can have multiple `meta_value`s.

Now let’s fetch all custom values for post 561:

    add_action( 'shutdown', function(){
    
    	$custom = get_post_custom( 561 );
    	print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
    });

Result:

    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` and `_edit_lock` are WordPress internals, we ignore that for the moment. Just note, we get these values an an array too, although there is just one value.   
`color` and `age` are arrays like all post meta values.  
`$custom['color'][0]` is `blue`.

Now we fetch just the color with `get_post_meta()`:


    add_action( 'shutdown', function(){

        $color = get_post_meta( 561, 'color' );
        print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
    });

Result:

    array (
      0 => 'blue',
      1 => 'red',
      2 => 'yellow',
    )

We get just one piece of our meta values here. `$color[0]` is still `blue`. Behind the scenes, WordPress has already fetched *all* custom values, so a next hit for `age` would be served from the cache.   
In terms of performance `get_post_custom()` and `get_post_meta()` are equal.

Last attempt: Get the color with `get_post_meta()` as a single value.


    add_action( 'shutdown', function(){
    
    	$color = get_post_meta( 561, 'color', TRUE );
    	print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
    });

Result: `blue`.

WordPress has done what you have done in your code: It has taken the array key `0` and returned the value as a string.

This is the most readable option, use it to write code that is easy to understand.

  [1]: https://i.sstatic.net/3I40K.png