ดัชนี [0] สำหรับบนเขตข้อมูลโพสต์คืออะไร


10

พยายามปรับปรุงความรู้ PHP ของฉันผ่านการทดสอบและลอง! ฉันสับสนใน [0] อาร์กิวเมนต์ที่ติดตามโค้ด PHP PHP

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()คือTRUEWordPress จะส่งคืนค่าเดียวนั่นคือรายการแรกในค่าโพสต์เมตาสำหรับคีย์ที่กำหนด

การเรียกครั้งแรกไปยังget_post_meta()จะดึงและเก็บค่าเมตาทั้งหมดของรหัสโพสต์นั้นในพื้นหลังดังนั้นการโทรในภายหลังจะไม่ส่งผลให้มีการสืบค้นฐานข้อมูลเพิ่มเติม

ตัวอย่าง

สมมติว่าเราสร้างคีย์โพสต์เมตาชื่อcolorแล้วเติมด้วยค่าที่แตกต่างกันสามค่าสำหรับหนึ่งโพสต์ 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 ไม่ทำให้คีย์เมตานี้ไม่ซ้ำกันแต่เพื่ออนุญาตให้มีหลายค่าสำหรับหนึ่งคีย์แทน

โครงสร้างผลลัพธ์ในpostmetaตารางของเราจะมีลักษณะดังนี้:

โต๊ะ

แต่ละแถวมีเอกลักษณ์meta_idแต่แต่ละแถวpost_idสามารถมีหลายmeta_keys และแต่ละแถวmeta_keyสามารถมีหลายmeta_values

ตอนนี้เรามาดึงค่าที่กำหนดเองทั้งหมดสำหรับโพสต์ 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 ภายในเราไม่สนใจเลยสักครู่ เพิ่งทราบเราได้รับค่าเหล่านี้อาร์เรย์เช่นกันแม้ว่าจะมีเพียงหนึ่งค่า
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',
)

เราได้รับค่าเมตาเพียงชิ้นเดียวของเราที่นี่ ยังคงเป็น$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.