Każdy klucz meta post może mieć wiele wartości. Otrzymujesz więc wartości domyślnie jako tablicę; pierwszy wpis ( 0
) jest najstarszy.
get_post_custom()
pobiera wszystkie meta-klucze z ich wartościami. Możesz uprościć swój kod dzięki:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
Gdy ostatnim parametrem get_post_meta()
jest TRUE
, WordPress zwróci jedną wartość: pierwszy wpis w meta wartości post dla danego klucza.
Pierwsze wywołanie get_post_meta()
spowoduje pobranie i buforowanie wszystkich meta wartości dla tego identyfikatora postu w tle, więc późniejsze wywołania nie spowodują dodatkowych zapytań do bazy danych.
Przykład
Załóżmy, że tworzymy meta klucz o nazwie o nazwie color
i wypełniamy go trzema różnymi wartościami dla jednego postu. Następnie robimy to samo z kluczem 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 );
});
Ostatni parametr FALSE
mówi WordPress nie zrobić tego klawisza meta wyjątkowy - ale aby umożliwić wielu wartości dla jednego klucza zamiast.
Wynikowa struktura w naszej postmeta
tabeli będzie wyglądać następująco:
Każdy wiersz ma unikalny meta_id
, ale każdy post_id
może mieć wiele meta_key
s, a każdy meta_key
może mieć wiele meta_value
s.
Teraz pobierzmy wszystkie wartości niestandardowe dla posta 561:
add_action( 'shutdown', function(){
$custom = get_post_custom( 561 );
print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});
Wynik:
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
i _edit_lock
są wewnętrznymi elementami WordPress, na razie to ignorujemy. Pamiętaj, że otrzymujemy te wartości i tablicę, chociaż jest tylko jedna wartość.
color
i age
są tablicami, jak wszystkie wartości po meta.
$custom['color'][0]
jest blue
.
Teraz pobieramy tylko kolor za pomocą get_post_meta()
:
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color' );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Wynik:
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
)
Otrzymujemy tutaj tylko jeden kawałek naszych meta wartości. $color[0]
jest nadal blue
. Za kulisami WordPress już pobrał wszystkie niestandardowe wartości, więc kolejne trafienie age
zostanie podane z pamięci podręcznej.
Pod względem wydajności get_post_custom()
i get_post_meta()
są równe.
Ostatnia próba: uzyskaj kolor get_post_meta()
jako pojedynczą wartość.
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Rezultat: blue
.
WordPress zrobił to, co zrobiłeś w kodzie: wziął klucz tablicy 0
i zwrócił wartość jako ciąg.
Jest to najbardziej czytelna opcja, użyj jej do napisania kodu, który jest łatwy do zrozumienia.