ポストメタフィールドのインデックス[0]は何ですか?


10

テストを通して私のPHPの知識を向上させて、試してみてください!次のWordPress PHPコードで[0]引数について混乱しています

global $post;
$custom = get_post_custom($post->ID);
$price = $custom['price'][0];
$coMake = $custom['coMake'][0];

echo $custom['price'][0];

それらはページの入力の索引付け/参照用ですか?もしそうなら、なぜ彼らは同じですか?それらを使用する理由と時期を教えてください。

回答:


17

各投稿メタキーは複数の値を持つことができます。つまり、デフォルトでは配列として値を取得します。最初のエントリ(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つの投稿にcolor3つの異なる値を入力します。次に、キーを使用して同じことを行います。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_lockWordPressの内部です、私たちは一瞬のためにそれを無視します。ただ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を受け取り、値を文字列として返しました。

これは最も読みやすいオプションです。理解しやすいコードを書くために使用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.