Untuk apa indeks [0] pada kolom meta pos?

10

Mencoba meningkatkan pengetahuan PHP saya melalui ujian dan coba! Saya bingung tentang [0] argumen dalam mengikuti kode PHP WordPress

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

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

Apakah mereka untuk mengindeks / mereferensikan input pada halaman? jika demikian mengapa mereka sama? dapatkah Anda memberi tahu saya mengapa dan kapan menggunakannya?

Behseini
sumber

Jawaban:

17

Setiap kunci meta pos dapat memiliki beberapa nilai. Jadi, Anda mendapatkan nilai secara default sebagai array; entri pertama ( 0) adalah yang tertua.

get_post_custom()mengambil semua kunci meta dengan nilainya. Anda dapat menyederhanakan kode Anda dengan:

$price  = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );

Ketika parameter terakhir get_post_meta()adalah TRUE, WordPress akan mengembalikan nilai tunggal: entri pertama dalam nilai meta pos untuk kunci yang diberikan.

Panggilan pertama ke get_post_meta()akan mengambil dan cache semua nilai meta untuk ID posting di latar belakang, jadi panggilan kemudian tidak akan menghasilkan permintaan basis data tambahan.

Sebuah contoh

Katakanlah, kami membuat kunci meta pos bernama colordan mengisinya dengan tiga nilai berbeda untuk satu pos. Kemudian kita melakukan hal yang sama dengan kunci 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 );
});

Parameter terakhir FALSEmemberitahu WordPress untuk tidak membuat kunci meta ini unik - tetapi untuk memungkinkan beberapa nilai untuk satu kunci saja.

Struktur yang dihasilkan di postmetatabel kami akan terlihat seperti ini:

meja

Setiap baris memiliki yang unik meta_id, tetapi masing post_id- masing dapat memiliki banyak meta_keys, dan masing-masing meta_keydapat memiliki banyak meta_values.

Sekarang mari kita ambil semua nilai khusus untuk posting 561:

add_action( 'shutdown', function(){

    $custom = get_post_custom( 561 );
    print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});

Hasil:

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_lastdan _edit_lockinternal WordPress, kami mengabaikannya untuk saat ini. Perhatikan saja, kami juga mendapatkan nilai-nilai ini sebagai array, meskipun hanya ada satu nilai.
colordan agearray seperti semua nilai meta pos.
$custom['color'][0]adalah blue.

Sekarang kita ambil hanya warnanya dengan get_post_meta():

add_action( 'shutdown', function(){

    $color = get_post_meta( 561, 'color' );
    print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});

Hasil:

array (
  0 => 'blue',
  1 => 'red',
  2 => 'yellow',
)

Kami hanya mendapatkan satu bagian dari nilai meta kami di sini. $color[0]masih blue. Di belakang layar, WordPress telah mengambil semua nilai khusus, jadi klik berikutnya untuk agedilayani dari cache.
Dari segi kinerja get_post_custom()dan get_post_meta()sama.

Upaya terakhir: Dapatkan warna dengan get_post_meta()sebagai nilai tunggal.

add_action( 'shutdown', function(){

    $color = get_post_meta( 561, 'color', TRUE );
    print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});

Hasil: blue.

WordPress telah melakukan apa yang telah Anda lakukan dalam kode Anda: Ia telah mengambil kunci array 0dan mengembalikan nilainya sebagai string.

Ini adalah opsi yang paling mudah dibaca, gunakan untuk menulis kode yang mudah dimengerti.

fuxia
sumber