Mỗi khóa meta bài có thể có nhiều giá trị. Vì vậy, bạn nhận được các giá trị theo mặc định như là một mảng; mục đầu tiên ( 0
) là mục cũ nhất.
get_post_custom()
tìm nạp tất cả các khóa meta với giá trị của chúng. Bạn có thể đơn giản hóa mã của mình bằng:
$price = get_post_meta( $post->ID, 'price', TRUE );
$comake = get_post_meta( $post->ID, 'coMake', TRUE );
Khi tham số cuối cùng get_post_meta()
là TRUE
, WordPress sẽ trả về một giá trị duy nhất: mục nhập đầu tiên trong giá trị meta bài đăng cho khóa đã cho.
Cuộc gọi đầu tiên get_post_meta()
sẽ tìm nạp và lưu trữ tất cả các giá trị meta cho ID bài đăng đó trong nền, vì vậy các cuộc gọi sau sẽ không dẫn đến các truy vấn cơ sở dữ liệu bổ sung.
Một ví dụ
Giả sử, chúng tôi tạo một khóa meta bài đăng có tên color
và điền nó với ba giá trị khác nhau cho một bài đăng. Sau đó, chúng tôi làm tương tự với một phím 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 );
});
Tham số cuối cùng FALSE
yêu cầu WordPress không làm cho khóa meta này trở nên duy nhất - mà phải cho phép nhiều giá trị cho một khóa thay thế.
Cấu trúc kết quả trong postmeta
bảng của chúng tôi sẽ trông như thế này:
Mỗi hàng có một duy nhất meta_id
, nhưng mỗi hàng post_id
có thể có nhiều meta_key
s và mỗi hàng meta_key
có thể có nhiều meta_value
s.
Bây giờ, hãy tìm nạp tất cả các giá trị tùy chỉnh cho bài 561:
add_action( 'shutdown', function(){
$custom = get_post_custom( 561 );
print '<pre>' . esc_html( var_export( $custom, TRUE ) ) . '</pre>';
});
Kết quả:
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
và _edit_lock
là nội bộ WordPress, chúng tôi bỏ qua điều đó vào lúc này. Chỉ cần lưu ý, chúng ta cũng nhận được các giá trị này một mảng, mặc dù chỉ có một giá trị.
color
và age
là các mảng giống như tất cả các giá trị meta bài.
$custom['color'][0]
là blue
.
Bây giờ chúng tôi chỉ lấy màu với get_post_meta()
:
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color' );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Kết quả:
array (
0 => 'blue',
1 => 'red',
2 => 'yellow',
)
Chúng tôi chỉ nhận được một phần của giá trị meta của chúng tôi ở đây. $color[0]
vẫn là blue
. Đằng sau hậu trường, WordPress đã tìm nạp tất cả các giá trị tùy chỉnh, do đó, lần truy cập tiếp theo age
sẽ được cung cấp từ bộ đệm.
Về mặt hiệu suất get_post_custom()
và get_post_meta()
bằng nhau.
Lần thử cuối cùng: Lấy màu với get_post_meta()
một giá trị duy nhất.
add_action( 'shutdown', function(){
$color = get_post_meta( 561, 'color', TRUE );
print '<pre>' . esc_html( var_export( $color, TRUE ) ) . '</pre>';
});
Kết quả : blue
.
WordPress đã thực hiện những gì bạn đã làm trong mã của mình: Nó đã lấy khóa mảng 0
và trả về giá trị dưới dạng chuỗi.
Đây là tùy chọn dễ đọc nhất, sử dụng nó để viết mã dễ hiểu.