Кожен мета-ключ повідомлення може мати кілька значень. Таким чином, ви отримуєте значення за замовчуванням як масив; перший запис ( 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_key
s, і кожен meta_key
може мати декілька meta_value
s.
Тепер давайте виберемо всі спеціальні значення для публікації 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
і повернув значення у вигляді рядка.
Це найбільш читаний варіант, використовуйте його для написання коду, який легко зрозуміти.