回答:
各投稿メタキーは複数の値を持つことができます。つまり、デフォルトでは配列として値を取得します。最初のエントリ(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()
は、その投稿IDのすべてのメタ値をバックグラウンドでフェッチしてキャッシュするため、以降の呼び出しで追加のデータベースクエリが発生することはありません。
たとえば、という名前の投稿メタキーを作成し、1つの投稿にcolor
3つの異なる値を入力します。次に、キーを使用して同じことを行います。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
ワードプレスが伝えないこのメタキーを作るためにユニークではなく、一つのキーに複数の値を許可します- 。
postmeta
テーブルの結果の構造は次のようになります。
各行は、一意有しmeta_id
、それぞれがpost_id
複数持つことができmeta_key
、Sを、それぞれがmeta_key
複数持つことができるmeta_value
のです。
次に、post 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の内部です、私たちは一瞬のためにそれを無視します。ただ1つの値しかありませんが、これらの値も配列として取得します。
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',
)
ここでは、メタ値の1つだけを取得します。$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
を受け取り、値を文字列として返しました。
これは最も読みやすいオプションです。理解しやすいコードを書くために使用してください。