แต่ละคีย์เมตาโพสต์สามารถมีได้หลายค่า ดังนั้นคุณจะได้รับค่าเริ่มต้นเป็นอาร์เรย์ รายการแรก ( 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()
จะดึงและเก็บค่าเมตาทั้งหมดของรหัสโพสต์นั้นในพื้นหลังดังนั้นการโทรในภายหลังจะไม่ส่งผลให้มีการสืบค้นฐานข้อมูลเพิ่มเติม
ตัวอย่าง
สมมติว่าเราสร้างคีย์โพสต์เมตาชื่อ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_key
s และแต่ละแถวmeta_key
สามารถมีหลายmeta_value
s
ตอนนี้เรามาดึงค่าที่กำหนดเองทั้งหมดสำหรับโพสต์ 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
และส่งกลับค่าเป็นสตริง
นี่เป็นตัวเลือกที่อ่านง่ายที่สุดใช้เพื่อเขียนรหัสที่เข้าใจง่าย