Каждый мета-ключ поста может иметь несколько значений. Таким образом, вы получаете значения по умолчанию в виде массива; первая запись ( 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()будут извлечены и кэшированы все мета-значения для этого идентификатора поста в фоновом режиме, поэтому последующие вызовы не приведут к дополнительным запросам к базе данных.
Пример
Допустим, мы создаем мета-ключ поста с именем 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являются массивами, как все мета значения 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и вернул значение в виде строки.
Это наиболее читаемый вариант, используйте его для написания кода, который легко понять.