テストを通じて私のPHP知識を向上させようとしてみてください。 WordPress PHPコードの後に[0]引数が混乱しています
global $post;
$custom = get_post_custom($post->ID);
$price = $custom['price'][0];
$coMake = $custom['coMake'][0];
echo $custom['price'][0];
それらはページ上の入力をインデックス化/参照するためのものですか?もしそうならなぜ彼らは同じですか?それらを使用する理由と使用時期を教えてください。
各投稿メタキーは複数の値を持つことができます。そのため、デフォルトで値を配列として取得します。最初のエントリ(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は単一の値を返します。与えられたキーのpostメタ値の最初のエントリです。
get_post_meta()
への最初の呼び出しはバックグラウンドでその投稿IDの all meta値を取得してキャッシュするので、その後の呼び出しは追加のデータベースクエリにはなりません。
たとえば、color
という名前の投稿メタキーを作成し、それに one postの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
はWordPress notにこのメタキーをuniqueにするように伝えます - しかし一つのキーに複数の値を許すようにします。
結果のpostmeta
テーブルの構造は次のようになります。
各行には一意のmeta_id
がありますが、各post_id
には複数のmeta_key
を含めることができ、各meta_key
には複数のmeta_value
を含めることができます。
それでは、ポスト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
は、すべてのpost meta値のような配列です。$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は既にallカスタム値を取得しているので、次の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
を取り、ストリングとして値を返しました。
これは最も読みやすいオプションです。理解しやすいコードを書くために使用してください。