Post meta alanlarındaki dizin [0] nedir?


10

Test ve deneyin yoluyla PHP bilgimi geliştirmeye çalışıyorum! WordPress PHP kodunu takip eden [0] argümanlarında kafam karıştı

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

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

Sayfadaki girişleri indeksleme / referanslama için mi? öyleyse neden aynılar ?! lütfen bunları neden ve ne zaman kullanmamı söyleyebilir misiniz?

Yanıtlar:


17

Her bir meta meta anahtarının birden fazla değeri olabilir. Böylece değerleri varsayılan olarak dizi olarak alırsınız; ilk giriş ( 0) en eskidir.

get_post_custom()tüm meta anahtarları değerleriyle alır. Kodunuzu aşağıdakilerle basitleştirebilirsiniz:

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

İçin son parametre get_post_meta()olduğunda TRUE, WordPress tek bir değer döndürür: verilen anahtar için meta sonrası değerindeki ilk girdi.

İlk çağrı, bu posta kimliği için tüm meta değerleri arka planda alır get_post_meta()ve önbelleğe alır , böylece daha sonraki çağrılar ek veritabanı sorgularına neden olmaz.

Bir örnek

Diyelim diyelim biz adında bir post meta anahtarı oluşturmak colorve üç farklı değerlerle doldurun bir yazı. Sonra aynısını bir anahtarla yaparız 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 );
});

Son parametre FALSEWordPress'e bu meta anahtarı benzersiz yapmamasını değil , bunun yerine bir anahtar için birden çok değere izin vermesini söyler .

Tablomuzda ortaya çıkan yapı postmetaşöyle görünecektir:

tablo

Her satır benzersizdir meta_id, ancak her birinin post_idbirden fazla meta_keys değeri meta_keyolabilir ve her birinin birden çok meta_values değeri olabilir.

Şimdi 561 sonrası için tüm özel değerleri getirelim:

add_action( 'shutdown', function(){

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

Sonuç:

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_lastve _edit_lockWordPress'in içselleriyiz, şimdilik bunu görmezden geliyoruz. Sadece bir değer olmasına rağmen bu değerleri de bir dizi alırız.
colorve agetüm post meta değerleri gibi dizilerdir.
$custom['color'][0]olduğunu blue.

Şimdi sadece rengi alıyoruz get_post_meta():

add_action( 'shutdown', function(){

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

Sonuç:

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

Burada meta değerlerimizin sadece bir parçasını alıyoruz. $color[0]hala blue. Sahne arkasında, WordPress zaten tüm özel değerleri getirmiştir , bu nedenle ageönbellekten bir sonraki isabet sunulacaktır.
Performans açısından get_post_custom()ve get_post_meta()eşittir.

Son deneme: Rengi get_post_meta()tek bir değer olarak elde edin.

add_action( 'shutdown', function(){

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

Sonuç: blue.

WordPress kodunuzda yaptıklarınızı yaptı: Dizi anahtarını aldı 0ve değeri bir dize olarak döndürdü.

Bu en okunabilir seçenektir, anlaşılması kolay kod yazmak için kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.